2016-12-15 7 views
0

を終了する前に解決するための約束を待っていない:約束チェーン、私は少しこれらを下に簡素化しようとした

 passData.savedDBGames.forEach((gameInfo) => { 
     return new Promise((resolve, reject) => { 
      stats.getPlayersStats(gameInfo.fixtureID).then((playerStats) => { 
      playerStatsPromise.push(playerStats); 
      console.info('Grab Done'); 
      resolve(); 
      }); 
     }); 
     }); 

     Promise.all(playerStatsPromise) 
     .then(function() { 
      console.info('All Done'); 
      app.io.emit('admin', 'Admin: done'); 
      resolve(passData); 
     }); 

私の理解へplayerStatsPromiseに含まれる約束の全てが解決するまでPromise.allは待つべき?

なぜAll DoneGrab Doneより前に終了しますか?

enter image description here

+0

であることが約束を返しますので、その代わりに、あなたのアレイを構築するためにmapを使用'? – trincot

+0

あなたのコードは意味をなさない。 'forEach'は特に副作用を引き起こすことを意図していますが、内部で新しいPromiseを返しています。 – aaaaaa

+0

'data2'はより大きな約束からのものでした。 @aaaaaa私はプロンプトが返されるように強制しようとしました。それは私が実験していることです。 –

答えて

2

あなたは、アレイplayerStatsPromiseを構築する際に未定義の変数data2を参照するように見えます。

var playerStatsPromise = passData.savedDBGames.map((gameInfo) => { 
    return new Promise((resolve, reject) => { 
     stats.getPlayersStats(gameInfo.fixtureID).then((playerStats) => { 
     console.info('Grab Done'); 
     resolve(); 
     }); 
    }); 
    }); 

    Promise.all(playerStatsPromise) 
    .then(function() { 
     console.info('All Done'); 
     app.io.emit('admin', 'Admin: done'); 
     resolve(passData); 
    }); 

そして、これはあなたの最初のコードブロックで行うすべてのであれば、あなたに簡素化することができます:: `、data2は何

var playerStatsPromise = passData.savedDBGames 
     .map(gameInfo => stats.getPlayersStats(gameInfo.fixtureID)); 

    Promise.all(playerStatsPromise) 
    .then(function() { 
     console.info('All Done'); 
     app.io.emit('admin', 'Admin: done'); 
     resolve(passData); 
    }); 
+0

奇妙な...私はどこでも地図を使用しました:)しかし、何らかの理由で私は脳のおならがあった。良いですね –

関連する問題