Рассмотрим этот код:
var p = new Promise(function(resolve, reject){
console.log("run");
setTimeout(reject, 5);
});
p.catch(function() {
console.log("cought!");
});
p.then(function() {
console.log("then!");
});
Вывод (браузер):
run
cought!
Здесь, в браузере, он ведет себя как ожидалось.Бун бежал как нод-скрипт, который я получаю:
run
cought!
(node:13927) UnhandledPromiseRejectionWarning: undefined
(node:13927) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:13927) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Таким образом, отказ был пойман, но узел все еще жалуется - почему это?
Я мог бы связать всевместе как предложено здесь и здесь :
new Promise(function(resolve, reject){
console.log("run");
setTimeout(reject, 5);
}).then(function() {
console.log("then!");
}).catch(function() {
console.log("cought!");
});
Вывод (браузер и узел):
run
cought!
В моем сценарии использования я не могу использовать это решение, потому что у меня есть заводская функция, котораястроит обещание.Функции catch и then должны быть прикреплены вызывающей стороной фабрики. В случае функции then она работает, но не для catch. Как мне избежать этого предупреждения?