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

复现一下看看
1
2
3
4
5
6
7
8
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

1
2
3
4
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

1
2
3
4
5
6
7
8
9
10
11
12
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

感谢您的阅读,本文由 smallwhite's Blog 版权所有。如若转载,请注明出处:smallwhite's Blog(https://smallwhite.ml/pub/uncategorized/nodejs-bu-huo-promise-wei-chu-li-de-reject.html
OSX 黑苹果 ps 2 键盘 驱动
webstorm nodejs ESLint 简单配置