为什么不触发JavaScript Promise Catch

时间:2018-06-19 14:29:00

标签: javascript promise

这是一个JavaScript代码,其中包含两个诺言。我想知道为什么在运行代码时没有找到catch块。

function getPromiseResolve(){
    return new Promise(function(resolve, reject){
        resolve('promise resolved')
    })
}

function getPromiseRejected(){
    return new Promise(function(resolve, reject){
        reject('promise rejected')
    })
}

getPromiseResolve()
.then(function(res){
    getPromiseRejected()
})
.then(function(res){
    console.log('response is ', res);
})
.catch(function(error){
    console.log('error is ', error);
})

2 个答案:

答案 0 :(得分:2)

您必须返回Promise.rejectcatch才能处理它。

来自MDN:

  

Promise.reject(reason)方法返回一个由于给定原因而被拒绝的Promise对象。

Promise.resolve('good')
.then(function(res){
    return Promise.reject('bad')
})
.catch(function(error){
    console.log('error is ', error);
})

更新

function getPromiseResolve(){
    return new Promise(function(resolve, reject){
        resolve('promise resolved')
    })
}

function getPromiseRejected(){
    return new Promise(function(resolve, reject){
        reject('promise rejected')
    })
}

getPromiseResolve()
.then(function(res){
    return getPromiseRejected() // LOOK HERE
})
.then(function(res){
    console.log('response is ', res);
})
.catch(function(error){
    console.log('error is ', error);
})

答案 1 :(得分:-1)

Promise.resolve('good')
.then(function(res){
    return Promise.reject('bad')
})
.catch(function(error){
    console.log('error is ', error);
})

// OR

Promise.resolve('good')
.then(function(res){
    throw new Error('bad')
})
.catch(function(error){
    console.log('error is ', error.message);
})