您的位置:首页 > Web前端 > Node.js

nodejs 捕获 promise 未处理的 reject

2016-09-23 11:58 417 查看

正常情况下,对于没有捕获的 promise的reject 会直接静默的吃掉.而这不是我们想要的.

复现一下看看

function cb(){
console.log('444');
fdsaf.fdafdas = 777;
}

new Promise((resolve,reject)=>{
cb(1)
})


解决:

文档

https://nodejs.org/dist/latest-v4.x/docs/api/process.html#process_event_unhandledrejection

process.on('unhandledRejection', (reason, p) => {
console.log("Unhandled Rejection at: Promise ", p, " reason: ", reason);
// application specific logging, throwing an error, or other logic here
});


toy code

process.on('unhandledRejection', (reason, p) => {
console.log("Unhandled Rejection at: Promise ", p, " reason: ", reason);
// application specific logging, throwing an error, or other logic here
});
function cb(){ console.log('444'); fdsaf.fdafdas = 777; } new Promise((resolve,reject)=>{ cb(1) })


toy code2 co

process.on('unhandledRejection', (reason, p) => {
console.log("Unhandled Rejection at: Promise ", p, " reason: ", reason.stack);
// application specific logging, throwing an error, or other logic here
});
var co = require('co');

function cb(){
console.log('444');
fdsaf.fdafdas = 777;
}

co(function*(){
console.log('1111');
throw 'myerror```';
}).then(function(value) {
console.log(value); // Success!
}).catch(err=>{
console.log('222');
console.log(err); // Error!
cb();
console.log('!!!!');
}).catch(err=>{
console.log('aaa :',err);
})


nodejs 6.6以后.对没有捕获的 reject 会发出一个警告.

promises: Unhandled rejections now emit a process warning after the first tick. (Benjamin Gruenbaum) #8223
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息