我实现了一个函数,它使用promises对数组中的值求和。 该算法生成工作并将其推送到任务列表。之后,承诺会同时处理。
function test(){
var arr = [10,20,30];
for(i=0; i<arr.length; i++){
var value = arr[i];
var tasks = [];
var work = (
sumValues(value).then((res) => {
return ({"value": value, "sum":res});
})
);
tasks.push(work);
}
return Promise.all(tasks).then(function (sum_arr) {
console.log(sum_arr);
}).catch(function (e) {
return false;
});
}
function sumValues(v){
var promise = new Promise(function (resolve, reject) {
try {
resolve(
v + 100
);
} catch (err) {
reject(Error(err));
}
});
return promise;
}
test();
但是有一个问题,返回的值始终是数组的最后一个值。我怀疑当循环迭代器改变时,它会改变预处理的promises中的位置,然后返回数组的最后一个值。
正确的返回应该是三个元素的数组,而不是一个。解决这个问题的最佳方法是什么?