Страницы

Поиск по вопросам

пятница, 19 апреля 2019 г.

Работа resolve в promise

Есть такой код, один аспект которого мне не понятен:
'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();

Комментариев нет:

Отправить комментарий