量角器 - 如何将一组承诺的结果放入另一个数组
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);
);
);
顺便说一句,我认为我的第二个选择更干净。
【讨论】:
以上是关于量角器 - 如何将一组承诺的结果放入另一个数组的主要内容,如果未能解决你的问题,请参考以下文章