javascript - 解决 promise 后返回数组

标签 javascript typescript promise protractor automated-tests

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

我想检查发送给函数的参数是否是字符串数组或网络元素数组,并且我想将此数组返回给其他函数以对其进行排序。

这是我的代码:

  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++;
              })
          })

      }

  }

如果我将字符串数组传递给此函数,它会返回包含该字符串的数组,但是当我传递一个 webelement 列表时,我会得到一个空数组(在 else block 中)。 我应该如何从 else block 返回未排序的?

最佳答案

如果你正在处理 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<[]> 。然后你可以像这样使用它:

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

关于javascript - 解决 promise 后返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041227/

相关文章:

javascript - 定义创建新服务对象的 promise

javascript - AngularJS 将对象从主 Controller 传递到其他 Controller

javascript - 将元素引用传递给指令

reactjs - 为什么此语法 Object[key] 在 typescript 中显示错误?我应该如何从对象读取属性?

typescript - 为什么要求抽象类完全实现命名接口(interface)?

javascript - 如何在 Express 中修复此 ES6 promise 链?

javascript - 以一个函数定位多个元素

JavaScript 无法与 RadTextBox 一起使用

javascript - 为什么多功能代码行不会产生错误而只是停止执行?

angularjs - 为什么使用 ngMock 包装第三方 Promise 时 $q.when 无法解析?