如何在异步函数中对 Javascript 数组的值求和
How do I sum the values of a Javascript array in an asynchronous function?
我正在使用Angularjs量角器进行e2e测试,并且我正在尝试对列中的值求和。在循环中,我可以很好地打印出每个值,但我无法弄清楚如何将它们全部相加。如果我尝试在 for 循环后返回总计,它是未定义的。
function getTotal() {
ptor.findElements(protractor.By.className('col33')).then(function(promColCells) {
var total;
for (var i = 2; i < promColCells.length; i += 2) {
promColCells[i].getText().then(function(promCellString) {
total += parseFloat(promCellString);
});
}
return total;
});
};
另一个(现在是 deletec)答案的想法是正确的,但笨重且不正确的承诺代码。使用 $q.all
(这是 ES6 投诉承诺实现中的 Promise.all)是我们等待一系列承诺完成的方式:
function getTotal() {
// we return the continuation here
return ptor.findElements(protractor.By.className('col33')).then(function(cells) {
// wait for all cells
return $q.all(cells.map(function(cell){ return cell.getText()}));
}).then(function(cellTexts){
return cellTexts.reduce(function(x,y){ return x + Number(y);},0);
});
}
或者,如果您不是Array#reduce
粉丝,则可以使用 for 循环求和。
然后,用法如下:
getTotal().then(function(total){
alert(total); // total value available here
});
请注意,像 Bluebird 这样的外部 promise 库可以让你做到:
return Promise.cast(ptor.findElements(protractor.By.className('col33')))
.map(function(cell){ return cell.getText(); })
.reduce(function(x,y){ return x+Number(y); });
哪个更干净。
量
角器具有内置映射功能。
我建议你做这样的事情:
function getTotal() {
// The same as element.all(by.css('.col33')). It will return
// a promise that resolves to an array os strings.
return $$('.col33').map(function(cell){
return cell.getText();
}).
then(function(values){
// Values is an Array.<string> parse the ints and return the value.
var result = 0;
values.forEach(function(val){
result += parseInt(val, 10);
});
return result;
});
};
getTotal.then(function(total) {
});
相关文章:
- 如何遍历包含对象的数组-javascript
- 保存数组javascript
- 查找数组javascript中包含的元素类型
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 从多维数组javascript中提取特定值
- 如何在数组javascript中选择伪随机值
- 拆分字符串数组(JavaScript)后未定义
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 使用条件for循环更新数组-Javascript
- 从数组javascript创建新对象
- 用数组(javascript)中的值替换regex捕获
- 从数组[Javascript]的总长度中减去一个干净的数字
- 将一个字符串数组解析为一个新的数组javascript
- 如何将对象转换为对象数组javascript
- 赢得't循环数组javascript
- 从不同的数组 JavaScript 中获取值
- 多维数组 JAVASCRIPT 出了点问题
- 可以't分配给一个对象数组javascript
- 比较数组JavaScript中的对象
- 如何完成缺少(连续)元素的数组|Javascript