Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析承诺后返回数组_Javascript_Typescript_Promise_Protractor_Automated Tests - Fatal编程技术网

Javascript 解析承诺后返回数组

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')

我正在努力解决我的问题,但我没有更多的想法。 我想创建一个函数,根据变量的类型返回值数组

我想检查发送给函数的参数是否是字符串数组或webelements数组,并将此数组返回给其他函数对其进行排序

这是我的代码:

  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()
    的信息,请参阅

首先,不能同步返回异步函数调用的结果。如果要在函数中进行异步函数调用,还需要在调用方中异步等待。但是,由于让函数返回同步或异步结果是疯狂的,因此您应该将其标准化,以始终返回异步结果,即使对于字符串大小写也是如此。绝对同意在两个分支中都返回一个承诺,以简化对函数的调用谢谢!这看起来很简单:)但我有一个问题,当我传递webelements列表($$)并尝试在另一个中使用此函数时:
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) => ...);