解决承诺后返回数组

时间:2018-10-29 08:10:15

标签: javascript typescript promise protractor automated-tests

我正在尝试解决我的问题,但是我已经没有想法了。 我想创建函数以根据类型变量返回值数组。

我想检查发送给函数的参数是字符串数组还是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块返回unSorted?

1 个答案:

答案 0 :(得分:1)

如果您正在处理承诺,则不能仅仅返回价值,它永远是一个承诺。您的代码可能应该是这样的:

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<[]>。然后,您可以像这样使用它:

returnByType(args).then((unsorted) => ...);