Показать сообщение отдельно
  #2 (permalink)  
Старый 14.08.2017, 17:46
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от tilin Посмотреть сообщение
Ставлю catch вместо обработчика reject
const debug = require("debug")("m");

const promise = new Promise((resolve, reject) => {
	setTimeout(() => {
		reject("promise rejected");
	}, 1000);
});

promise.then(v => {
	debug("resolve", v);
});

promise.catch(e => {
	debug("catch: ", e);
	return;
})


работает так же, но nodejs кричит UnhandledPromiseRejectionWarning. Как понимать этот варнинг?
На самом деле then здесь неявно получает второй параметр, и полностью выглядит так:
promise.then(v => {
	debug("resolve", v);
},
e => {
        throw e;
});


в итоге промис, созданный этим then, будет отклоненный. Именно он и вываливает ошибку, т.к. для него нет вызова then или catch (тот catch, который идет далее, вызывается на исходном промисе).

А в первом случае в then вторым аргументом попадала функция, которая не реджектила, в итоге then возвращал зарезолвленный промис.

Последний раз редактировалось Alexandroppolus, 14.08.2017 в 17:53.
Ответить с цитированием