Мне нужно вызвать операции 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
});
Тогда для каждого ответа мне нужно увеличить счетчик, как это
console.log("processing " + counter++ + " of " + messageList.length);
Как я буду делать это правильно, так как мне нужно ждать, пока все обещания будут завершены до перехода на следующий шаг?
Вы можете назначить 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)
Promise.all параллельно выполняет вложенные обещания. Вы не можете использовать счетчик AFAIK. По крайней мере, без изменения счетчика в качестве побочного эффекта.
this.sms.send()
возвращает обещание?