首页 > 解决方案 > 节点 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)
})

标签: javascriptnode.jspromise

解决方案


p3是一个独立的 Promise,没有.catch. 所以,当p3rejected 时,你会得到一个UnhandledPromiseRejectionWarning. 即使稍后在具有适当属性的链中p3消耗,其本身也没有.Promisecatchp3catch

代替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之后放置一个。catchp3


推荐阅读