Javascript 每一个承诺的回应

Javascript 每一个承诺的回应,javascript,promise,ionic3,Javascript,Promise,Ionic3,我需要在循环中调用ascync操作: for (var i = 0; i < message.destinatarios.length; i++) { messageList.push(this.sms.send(destinatario.numero_celular, string)); // this will take a litle time to be executed } // Here I need something to be fired each time on

我需要在循环中调用ascync操作:

for (var i = 0; i < message.destinatarios.length; i++) {
  messageList.push(this.sms.send(destinatario.numero_celular, string));
 // this will take a litle time to be executed
}

// Here I need something to be fired each time one of the promises in messageList is resolved

Promise.all(messageList)
  .then(res => {
     //that is executed when all the promises have been resolved 
  })
  .catch(err => {
     // that is executed when some of then fail
  });

既然我需要等待所有承诺兑现,直到进入下一步,我该如何以正确的方式完成呢?

您可以为每个承诺分配一个
resolveCallback
。 然后,使用
Promise.all()

let counter = 0;
for (var i = 0; i < message.destinatarios.length; i++) {
  const prom = this.sms.send(destinatario.numero_celular, string);
  messageList.push(prom);
  prom.then(() => {
    //your logic for whatever you want to do for every time a promise is resolved
    console.log("processing " + ++counter + " of " + messageList.length); 
  })
}
Promise.all(messageList)
let计数器=0;
for(变量i=0;i{
//每次承诺解决后,你想做什么就做什么的逻辑
console.log(“+messageList.length”的“处理”+++counter+”);
})
}
Promise.all(消息列表)

您可以为每个承诺分配一个
resolveCallback
。 然后,使用
Promise.all()

let counter = 0;
for (var i = 0; i < message.destinatarios.length; i++) {
  const prom = this.sms.send(destinatario.numero_celular, string);
  messageList.push(prom);
  prom.then(() => {
    //your logic for whatever you want to do for every time a promise is resolved
    console.log("processing " + ++counter + " of " + messageList.length); 
  })
}
Promise.all(messageList)
let计数器=0;
for(变量i=0;i{
//每次承诺解决后,你想做什么就做什么的逻辑
console.log(“+messageList.length”的“处理”+++counter+”);
})
}
Promise.all(消息列表)

Promise.all并行运行嵌套承诺。你不能用柜台。至少不改变计数器作为副作用。

承诺。所有承诺都并行运行嵌套承诺。你不能用柜台。至少不改变计数器作为副作用。

如果有索引,为什么要增加计数器?Promise.all将按照您发送的顺序向您提供所有结果。
this.sms.send()
是否返回一个承诺?是的,this.sms.send返回一个承诺@OzanI编辑它@Xufox,但这不是真正的代码,只是给出一个承诺example@WelderMarcos是的,但如果你用的是承诺,在解决这些问题时,你不需要计算它们。你已经有了一个回调,当它们处理完所有的结果时会被调用。如果你有一个索引,为什么要增加一个计数器?Promise.all将按照您发送的顺序向您提供所有结果。
this.sms.send()
是否返回一个承诺?是的,this.sms.send返回一个承诺@OzanI编辑它@Xufox,但这不是真正的代码,只是给出一个承诺example@WelderMarcos是的,但如果你用的是承诺,在解决这些问题时,你不需要计算它们。你已经有了一个回调,当他们处理完所有结果后,就会调用它。非常感谢你解释@Alex非常感谢你解释@Alex似乎是解决问题最有效的方法,但是每个承诺中的响应会影响承诺吗?所有响应?@WelderMarcos,不。似乎是解决问题最有效的方法,但每个承诺中的回应会影响承诺吗?所有回应?@WelderMarcos,不会。