Есть такой код, один аспект которого мне не понятен:
'use strict';
let promise = new Promise((resolve, reject) => {
resolve("Промис завершился");
console.log("Промис ждет, пока я появлюсь");
});
promise
.then(
result => console.log("Fulfilled: " + result),
error => console.log("Rejected: " + error)
);
Собственно, не понятно то, что алерт в функции-конструкторе вообще отрабатывает своё и появляется. И сразу же за ним (это прям вообще не понятно - почему за ним?) появляется "промис завершился".
Не понятно по какому принципу работает resolve(), то есть передается управление обработчику .then
Я много раз видел, когда resolve() помещали конкретно внутрь обработчика onload (для ajax запросов, например), который сам по себе говорит о завершенности выполнения вопроса. А получается, что resolve() можно запихнуть хоть с самого начала и код ниже всё равно отработает.
Да, конечно, в случае с ajax можно ожидать отклонение запроса сервером, поэтому нужно использовать resolve() в случае успеха, а reject() в случае ошибки.
Помогите разобраться.
Ответ
В JS остановить функцию может только или return, ошибка или её конец.
Почитать
В ожидании используется некий асинхронный подход (иначе не вышло бы отлавливать асинхронные операции, Ваш КО): при разрешении обещания, коллбэк встаёт в очередь до завершения ожидающего кода в функции и только потом вызывается.
Если Вам этого не нужно, используйте return: return resolve();
Комментариев нет:
Отправить комментарий