Как я могу выполнить следующий элемент в цикле только после успешного завершения выполнения асинхронной функции?
Вот код sudo моего текущего кода:
async function myAsyncFunction(param) {
try {
// some code
} catch (error) {
// some code
}
}
const myArray = ["one", "two", "three", "four"];
for(let i = 0; i < myArray.length; i++) {
const resultOfMyAsyncFunction = myAsyncFunction(myArray[i]);
resultOfMyAsyncFunction.then(result => {
// some code
});
}
Сейчас он обрабатываетсявсе элементы в массиве, если успешно, в противном случае это не удается.Я хочу попробовать один предмет за раз.Если это успешно, попробуйте следующий пункт.Если нет, попробуйте еще раз.
Что я здесь не так делаю?
for(let i = 0; i < myArray.length;) {
const resultOfMyAsyncFunction = myAsyncFunction(myArray[i]);
resultOfMyAsyncFunction.then(result => {
// some code
})
.then(i++) //Shouldn't i++ happen only after previous .then() is successful?
;
}
Я ищу это:
for(let i = 0; i < myArray.length;) {
const resultOfMyAsyncFunction = myAsyncFunction(myArray[i]);
resultOfMyAsyncFunction.then(result => {
// if result is successful, do something
i++;
//else try again
});
}
Решение Берги сработало.
(async function() {
const myArray = ["one", "two", "three", "four"];
for(let i = 0; i < myArray.length; i++) {
const result = await myAsyncFunction(myArray[i]);
// ^^^^^
if (result) {
// do something
}
else {
i--;
}
}
})();