在for循环中使用Javascript Promise

时间:2017-09-26 13:03:33

标签: javascript for-loop promise

我对Promises总计n00b,并希望更多地使用它们,但需要一些帮助。以下面的代码示例为例:

for (var key in list){
    DoSomething(list[key])
        .then(function(){
            console.log(key);
        });
}

function DoSomething(item){
    return new Promise(function(resolve, reject){
        resolve();
    });
}

console.log(key)部分无法正常工作,因为变量key在外部范围内被修改。解决问题的方法可能是resolve具有key值的承诺,但不幸的是,DoSomething方法是共享库的一部分。

for (var key in list){
    DoSomething(list[key], key)
        .then(function(key){
            console.log(key);
        });
}

function DoSomething(item, key){
    return new Promise(function(resolve, reject){
        resolve(key);
    });
}

还有其他方法可以让for循环console.log(key)正常工作吗?

2 个答案:

答案 0 :(得分:2)

使用let代替var,它可以正常工作



let list = {a:1, b:2};

for (let key in list){
    DoSomething(list[key])
        .then(function(){
            console.log(key);
        });
}

function DoSomething(item){
    return new Promise(function(resolve, reject){
        resolve();
    });
}




答案 1 :(得分:1)

使用IIFE

for (var key in list){
    (function(key){
        DoSomething(list[key])
        .then(function(){
            console.log(key);
        });
     })(key);
}