在for循环中使用Javascript承诺

在for循环中使用Javascript承诺

问题描述:

我对承诺的总数为n00b,并希望更多地使用它们,但需要一点帮助。正确在for循环中使用Javascript承诺

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)正常工作?

+1

... –

使用让,而不是变种,它会用 “让” 应该做的工作工作

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(); 
 
    }); 
 
}

+0

请投票明确重复,而不是回答他们。 – Cerbrus

+0

@Cerbrus你确定你指定了正确的重复? –

+0

@GiorgiMoniava:也许不是最好的,但它确实回答了这个问题。 – Cerbrus

使用IIFE

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

@Downvoter - 原因请 – nikhil

+0

由于OP已经使用Promises,___让___建议一些比IIFE更现代的方法。此外,请对明显的重复项目进行近距离投票,而不是回答它们。 – Cerbrus

+0

@Cerbrus - 为此我希望有es6标签。 – nikhil