2016-12-15 2 views
0

Я попытался упростить это немного вниз:Promise цепи, не дожидаясь обещает решить до окончания

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

моему пониманию Promise.all должны ждать, пока все обещания, содержащиеся в playerStatsPromise не решены?

Так почему же All Done закончить до Grab Done?

enter image description here

+0

Что такое 'data2 '? – trincot

+0

Ваш код не имеет смысла. 'forEach' в частности призван вызывать побочные эффекты, однако вы возвращаете новое обещание внутри него. – aaaaaa

+0

'data2' был из большей цепочки обещаний. @aaaaaa Я сделал это, чтобы попытаться вернуть обещание, вот только я экспериментирую. –

ответ

2

Вы, кажется, ссылаться на неопределенную переменную data2 при построении массива playerStatsPromise. Вместо того, чтобы использовать map для построения массива, так что будет возвращать обещания:

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

И если это все, что вы делаете в первом блоке кода, можно упростить:

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

Нечетный ... Я везде использовал карты :) Но почему-то у меня был мозговой пердит. Хороший –

Смежные вопросы