2017-09-26 23 views
1

私はPromisesのn00bの合計を使用していますが、さらに使用したいと思いますが、少し助けが必要です。以下のコード例を取る:forループでJavascript Promiseを使用する

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は、外側範囲で変更されるので、習慣正しく動作。それはkeyという値でresolveとなる可能性がありますが、残念ながら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

を働くだろう... –

答えて

2

利用代わりに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(); 
 
    }); 
 
}

+0

答えるのではなく、明らかに重複して投票してください。 – Cerbrus

+0

@Cerbrus正しい複製を指定してもよろしいですか? –

+0

@GiorgiMoniava:おそらく最高のものではないかもしれませんが、それは質問に答えます。 – Cerbrus

1

使用生命維持

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

@Downvoter - 理由please – nikhil

+0

OPがPromisesを使用しているので、___ let'sはIIFEよりもいくつか現代的な方法を提案します。また、回答する代わりに明らかな重複を閉じるようにしてください。 – Cerbrus

+0

@Cerbrus - そのためには、es6タグがあることを願っています。 – nikhil

関連する問題