代码之家  ›  专栏  ›  技术社区  ›  iJade

为什么没有触发javascript promise catch

  •  0
  • iJade  · 技术社区  · 7 年前

    这是一个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 回复  |  直到 7 年前
        1
  •  2
  •   J. Pichardo    7 年前

    你必须归还 Promise.reject 对于 catch 去处理它。

    来自MDN:

    承诺拒绝(理由)方法 收益率 因特定原因而被拒绝的承诺对象。

    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);
    })
        2
  •  -1
  •   Tareq    7 年前

    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);
    })
    推荐文章