javascript - 节点 8.6 javascript 承诺:UnhandledPromiseRejectionWarning
问题描述
我有一个错误:(节点:6186)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):threep(节点:6186)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。 -------- 一个 ========= 两个 CaughtCathchError threep (node:6186) PromiseRejectionHandledWarning: Promise 拒绝是异步处理的 (rejection id: 1) 我正在按嵌套顺序使用我的 3 个 promise 函数。p1,p2,p3- 是我的承诺函数,如下所示。我尝试在所有 p1、p2、p3 函数中添加承诺拒绝,但它仍然相同
enter code here
var p1 = new Promise(function (resolve, reject) {
setTimeout(function () {
// resolve('ones')
resolve('ones')
}, 9000)
})
var p2 = new Promise(function (resolve, reject) {
setTimeout(function () {
// throw new Error('eeeee');
//reject('two')
resolve('two')
}, 1000)
})
var p3 = new Promise(function (resolve, reject) {
setTimeout(function () {
reject('three')
}, 4000)
})
p1.then(function(result){
console.log("--------", result)
// return p2.then(function(res){console.log(res)}).catch(function(err){console.log(err)})
return p2
}).then(function(p2result){
console.log("=========", p2result)
return p3;
}).then(function(p3result){
console.log('*********', p3result)
}).catch(function(err){
console.log("CaughtCathchError", err)
})
解决方案
p3
是一个独立的 Promise,没有.catch
. 所以,当p3
被reject
ed 时,你会得到一个UnhandledPromiseRejectionWarning
. 即使稍后在具有适当属性的链中p3
消耗,其本身也没有.Promise
catch
p3
catch
代替p3
,您可以使用返回 a的函数Promise
,并确保捕获对该函数的所有调用:
var p1 = new Promise(function (resolve, reject) {
setTimeout(function () {
// resolve('ones')
resolve('ones')
}, 1000)
})
var p2 = new Promise(function (resolve, reject) {
setTimeout(function () {
// throw new Error('eeeee');
//reject('two')
resolve('two')
}, 1000)
})
var getp3 = () => new Promise(function (resolve, reject) {
setTimeout(function () {
reject('three')
}, 1000)
})
p1.then(function(result){
console.log("--------", result)
// return p2.then(function(res){console.log(res)}).catch(function(err){console.log(err)})
return p2
}).then(function(p2result){
console.log("=========", p2result)
return getp3();
}).then(function(p3result){
console.log('*********', p3result)
}).catch(function(err){
console.log("CaughtCathchError", err)
})
如果您需要立即初始化,则在其本身p3
之后放置一个。catch
p3
推荐阅读
- swift - 使用 SwiftUI 和 FireStore 更新文本
- python - python中的多类AUC ROC分数
- ruby-on-rails - 如何在 Ruby 上打开 base64 电子表格
- terraform - 如何使用 Terraform 创建 PostgreSQL RDS 数据库的 Aurora 副本?
- python - Codecademy Python 2 石头、纸、剪刀
- javascript - 带有 Jquery 的轮播
- python - 将 python 连接到 cx_oracle 时出现问题 - 错误 ORA-01804
- reactjs - 修复了特定 Next.js 路由上的侧边菜单
- excel - 在 VBA 中访问私有变量给出“未找到变量”
- html - 在移动设备和桌面上正确显示 HTML/CSS