nodejs 捕获 promise 未处理的 reject
正常情况下,对于没有捕获的 promise的reject 会直接静默的吃掉.而这不是我们想要的. 复现一下看看
function cb(){
console.log('444');
fdsaf.fdafdas = 777;
}new Promise((resolve,reject)=>{
cb(1)
})
解决:
文档 【nodejs 捕获 promise 未处理的 reject】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
推荐阅读
- 使用Promise对微信小程序wx.request请求方法进行封装
- 从如何使用到如何实现一个Promise
- Promise详解
- Promise|Promise 异步控制流
- 带你了解NodeJS事件循环
- nodejs|nodejs 版本管理
- nodejs生成uuid
- Promise|Promise 高级用法对比
- Nodejs爬虫实战项目之链家
- promise面试题--从源码说