Javascript 解析承诺后返回数组
我正在努力解决我的问题,但我没有更多的想法。 我想创建一个函数,根据变量的类型返回值数组 我想检查发送给函数的参数是否是字符串数组或webelements数组,并将此数组返回给其他函数对其进行排序 这是我的代码:Javascript 解析承诺后返回数组,javascript,typescript,promise,protractor,automated-tests,Javascript,Typescript,Promise,Protractor,Automated Tests,我正在努力解决我的问题,但我没有更多的想法。 我想创建一个函数,根据变量的类型返回值数组 我想检查发送给函数的参数是否是字符串数组或webelements数组,并将此数组返回给其他函数对其进行排序 这是我的代码: private static returnByType(unSortedElements) { var i = 0; var unSorted = []; if (typeof unSortedElements[0] === 'string')
private static returnByType(unSortedElements) {
var i = 0;
var unSorted = [];
if (typeof unSortedElements[0] === 'string') {
unSorted = unSortedElements;
return unSorted;
} else {
return unSortedElements.each((eachName) => {
eachName.getText().then((name) => {
unSorted[i] = name;
i++;
})
})
}
}
如果我将字符串数组传递给此函数,它将返回带有此字符串的数组,但当我将webelements列表传递给该函数时,会得到一个空数组(在else块中)。
我应该如何从else块返回未排序的值?如果您处理的是promise,您不能只返回值,它将始终是一个promise。您的代码可能如下所示:
private static returnByType(unSortedElements) {
var i = 0;
var unSorted = [];
if (typeof unSortedElements[0] === 'string') {
unSorted = unSortedElements;
// Promise.resolve(unSorted) to unify with else
return Promise.resolve(unSorted);
} else {
// return type will be Promise<[]>
return Promise.all(unSortedElements.map((eachName) => eachName.getText()));
}
}
- 有关
的信息,请参阅Promise.all()
- 有关
的信息,请参阅Promise.resolve()
this.returnByType(unSortedElements)。然后((unsorted)=>{console.log(unsorted)})代码>然后在控制台中我得到一个错误nHandledPromisejectionWarning:TypeError:undefined不是function.all()的函数,function.returnByType(/home/kamil/projects/automation tests/tmp/utils/Sort.js:18:28
该错误没有说明太多问题。您必须显示类型以及unSortedElements
的来源。如果unSortedElements
是一些对象的数组,其getText()
returna promise.unSortedElements是我通过unSortedElements=$$(“.adm chart.card title”)获得的第页上各节的标题列表
正如我前面所说,一旦返回到这个函数,returnByType
将被传递带有文本的数组,其他时间将被传递到webelement列表。Te排序函数将使用这个来排序返回的值,而不是它的类型(文本数组或webelement数组)
returnByType(args).then((unsorted) => ...);