我对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)
正常工作吗?
答案 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);
}