2016-12-15 3 views
0

Ich habe versucht, diese ein wenig nach unten zu vereinfachen:Versprechen Kette wartet nicht auf Versprechungen vor lösen endet

Promise.all
 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); 
     }); 

Zu meinem Verständnis sollte warten, bis alle der in playerStatsPromise enthaltenen Versprechen gelöst haben?

Warum also All Done Finish vor Grab Done?

enter image description here

+0

Was ist 'Daten2 '? – trincot

+0

Ihr Code macht keinen Sinn. 'forEach' soll insbesondere Nebenwirkungen verursachen, jedoch gibt es eine neue Promise. – aaaaaa

+0

'data2' war von der größeren Versprechenskette. @aaaaaa Ich habe das getan, um zu versuchen, ein Versprechen zurückzugeben, das ist nur ich experimentiere. –

Antwort

2

Sie scheinen eine undefinierte Variable data2 zu verweisen, wenn playerStatsPromise Ihr Array zu bauen. Stattdessen map verwenden Ihr Array zu bauen, denn das wird die Versprechen zurück:

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

Und wenn dies alles, was Sie in Ihrem ersten Code-Block tun, könnten Sie vereinfachen zu:

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

Seltsam ... Ich habe Karten überall sonst benutzt :) Aber aus irgendeinem Grund hatte ich ein Gehirn furzen. Schön –

Verwandte Themen