Вы не можете структурировать его так, как вы это делали, потому что while()
l oop будет работать вечно и никогда не позволит запустить даже первый обработчик .then()
(из-за времени и причин события l oop). Таким образом, вы не можете просто сломать ваш while
l oop из обработчика .then()
.
Если вы можете использовать async/await
, то это проще:
while (relevantRefundRequests.length >= waitList[0].quantity) {
let data = await stripe.paymentIntents.create({ ... });
if (some condition) {
break;
}
}
Имейте в виду, что содержащая здесь функция должна быть помечена async
и будет возвращаться задолго до того, как будет выполнено l oop, поэтому вы должны обработать это соответствующим образом.
Если вы можете ' Если использовать async/await
, то код необходимо реструктурировать, чтобы использовать управляющие структуры, отличные от while
l oop, и было бы полезно увидеть реальный код (а не только псевдокод), чтобы сделать более конкретное предложение для как лучше это сделать. Общая идея такова:
function runAgain() {
if (relevantRefundRequests.length >= waitList[0].quantity) {
return stripe.paymentIntents.create({ ... }).then(data => {
if (some condition to break the cycle) {
return finalResult;
} else {
// run the cycle again
return runAgain();
}
});
} else {
return Promise.resolve(finalResult);
}
}
runAgain().then(finalResult => {
console.log(finalResult);
}).catch(err => {
console.log(err);
});