如何等到更新完成后才能转到下一个项目?

时间:2016-09-12 01:36:01

标签: javascript asynchronous firebase firebase-realtime-database generator

我希望它等到.update()完成后再转到otherPlayers数组中的下一个播放器。我不知道发电机或其他什么东西可以在这里工作。

let {players} = this.props;

for(let player of otherPlayers) {
  const index = players.findIndex(p => p.Id === player.Id);
  const firebaseId = index && players[index].firebaseId;

  if(index !== -1 && firebaseId !== null) {
    window.firebase.database().ref(`/players/${firebaseId}`)
     .update({...player}, /* Callback possible */);
  } 
}

1 个答案:

答案 0 :(得分:1)

可能是这样的事情。

let {players} = this.props;

let p = Promise.resolve(); // just really want a promise to start

for(let player of otherPlayers) {
  const index = players.findIndex(p => p.Id === player.Id);
  const firebaseId = index && players[index].firebaseId;

  if(index !== -1 && firebaseId !== null) {
    p = p.then(()=>{
      return window.firebase.database().ref(`/players/${firebaseId}`)
       .update({...player}, /* Callback possible */);
    });
  } 
}

这以解决的promise开始,这将导致第一次更新立即执行。每个后续更新都链接到先前承诺的解决方案。