Я только что установил Node v7.2.0 и узнал, что следующий код:
var prm = Promise.reject(new Error('fail'));
приводит к этому сообщению:;
(node:4786) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: fail
(node:4786) 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.
Я понимаю причины этого, так как многие программисты, вероятно, испытали разочарование Error
в результате проглатывания Promise
. Однако затем я сделал этот эксперимент:
var prm = Promise.reject(new Error('fail'));
setTimeout(() => {
prm.catch((err) => {
console.log(err.message);
})
},
0)
что приводит к:
(node:4860) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: fail
(node:4860) 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.
(node:4860) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 1)
fail
I на основе PromiseRejectionHandledWarning
предполагает, что обращение с a Promise
асинхронно является/может быть плохой.
Но почему это?