量角器 - 如何将一组承诺的结果放入另一个数组

Posted

技术标签:

【中文标题】量角器 - 如何将一组承诺的结果放入另一个数组【英文标题】:protractor - how to get the result of an array of promises into another array 【发布时间】:2014-03-11 06:23:02 【问题描述】:

我从这段代码中得到了一系列承诺:element.all(by.repeater('unit in units')),我发现很难将数据放入另一个数组中:

element.all(by.repeater('unit in units')).then(function (arr) 
    var items = [];

    for (var i = 0; i < arr.length; i++) 
      arr[i].getText().then(function(text) 
        items.push(text);
      );
    

   //PROBLEM ITEMS is Empty
   console.log(items);
);

【问题讨论】:

【参考方案1】:

设法以更简单的方式获得相同的结果,避免使用 Q 和中继器。使用内置地图就可以了。

var tabs = element.all(by.css('.unitTabs li a')).map(function (elm) 
    return elm.getText();
);

tabs.then(function (result) 
    var sorted = _.sortBy(result, function (name)  return name; );
    for (var i = 0; i < result.length; i++) 
        expect(result[i]).toBe(sorted[i]);
    
);

【讨论】:

我很高兴有人在使用我的地图实现! 谢谢安德烈斯,非常方便的工具,你有任何类型的博客/wiki,我们可以看到更多关于请求的细节吗?我问的原因是因为我发现它挂在网络上的某个地方进行测试,而不是正确的文档 你也可以使用protractor.promise.all,见spin.atomicobject.com/2014/12/17/… tabs 地图中应该期待什么,关键是什么,价值是什么?你能把它添加到答案吗?【参考方案2】:

使用 Q 修复

var Q = require('q');

element.all(by.repeater('unit in units')).then(function (arr) 
    var promises = [];
    for (var i = 0; i < arr.length; i++) 
        promises.push(arr[i].getText());
    

    Q.all(promises).done(function (result) 
        // print the results when the lookups and processing are done                
        console.log(result.length);
        console.log(result);                
    );
);

【讨论】:

感谢分享答案,但是...请问 Q 是什么? :) 一个用 javascript 编写和编写异步 promise 的工具 documentup.com/kriskowal/q 您需要在您的应用程序存储库中使用“npm install q --save-dev”安装 q 如果可以避免就不要使用Q,它很慢并且消耗大量内存。考虑改用蓝鸟。【参考方案3】:

npm Q 是第一件事,然后在你的脚本之上使用 requirejs

      var Q = require('q');

      element.all(by.repeater('object in objects')).then(function (arr) 
          var promises = [];
          for (var i = 0; i < arr.length; i++) 
              promises.push(arr[i].getText());
          

          Q.all(promises).done(function (result) 
              // print the results when the lookups and processing are done
              console.log(result.length);
              console.log(result);
          );
      );

顺便说一句,我认为我的第二个选择更干净。

【讨论】:

以上是关于量角器 - 如何将一组承诺的结果放入另一个数组的主要内容,如果未能解决你的问题,请参考以下文章

将一组结构放入unix中的共享内存中,以便客户端程序可以访问它

承诺执行条件

如何解决量角器中的承诺

如何将SQL查询结果存放到数组里面

如何将一组自定义结构保存到 plist swift

我如何将一次出现的所有项目过滤到一个列表中,并将多次出现的所有项目过滤到另一个列表中?