使用承诺安排工作

时间:2017-04-17 14:11:02

标签: javascript promise

我实现了一个函数,它使用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中的位置,然后返回数组的最后一个值。

正确的返回应该是三个元素的数组,而不是一个。解决这个问题的最佳方法是什么?

0 个答案:

没有答案