Разрешит ли в итерации цикл прерывания цикла обещания?
Нет, не будет.Если вы хотите разорвать цикл, вы должны сделать это с помощью break
или return
.
Но, как отдельная вещь, здесь есть пара других проблем:
В этом коде нет причины для new Promise
.async
функции возвращают обещания, не нужно их оборачивать.
Использование флага ошибки с разрешением обычно не является наилучшей практикой.Используйте отклонение , чтобы сообщить о неудаче, а не выполнение с кодом ошибки.
Итак:
return (async function(resolve, reject) {
for (let i = 0; i < list.length; i++) {
let response = await myAsyncFunction();
if (response.ok === false) { // I'd use `if (!response.ok) {`
throw new Error("something goes wrong");
}
}
// Presumably return something here
})();
(То естьвыглядит немного неловко. Если вы предоставите больше контекста, возможно, можно будет сделать его менее неловким.)
Аналогично, myAsyncFunction
либо A) Не должно быть функцией async
, либо B)Не следует использовать new Promise
.См. Что такое явное обещание построения antipattern и как мне его избежать?
Наконец, это подозрительно:
let response = await myAsyncFunction();
if (response.ok === false) { // I'd use `if (!response.ok) {`
throw new Error("something goes wrong");
}
Если нет очень веская причина, myAsyncFunction
должен отклонить, а не выполнить свое обещание в случае возникновения проблемы.(Сотни тысяч примеров неправильного кода, использующего fetch
без проверки response.ok
, свидетельствуют об этом.)