【问题标题】:Handle promise rejection without rejecting the promise that calls it?在不拒绝调用它的承诺的情况下处理承诺拒绝?
【发布时间】:2017-09-18 17:19:21
【问题描述】:

我希望promise catch 块不会使promise 失败,我只想在它没有成功时返回false!我该怎么做?

我尝试将拒绝包装在 try catch 块中,但没有成功。

https://jsfiddle.net/2fz69ea2/1/

var passing_promise = new Promise(function(resolve, reject) {
  resolve('Success');
});

// I want this function to just return false, 
var failing_promise = new Promise(function(resolve, reject) {
  reject('Failure');
 })
.then(() => {
  return true;
})
.catch(() => {
  return false;
})

passing_promise.then(()=>{
  return failing_promise()
}).then((ret) => {
  console.log('please print false.. please! ', ret)
})
.catch(() => {
  console.log('I Never want to make it here, but as it stands I do')
})

我也想知道这是否意味着我在滥用承诺。请帮忙!

【问题讨论】:

    标签: node.js ecmascript-6 promise


    【解决方案1】:

    在做

    .catch(() => {
      return false;
    })
    

    是正确的。这将解决false的承诺。

    你的问题是一个错字:

     return failing_promise()
    

    failing_promise 不是函数,你不能调用它。应该只是

    return failing_promise
    

    var passing_promise = new Promise(function(resolve, reject) {
      resolve('Success');
    });
    
    // I want this function to just return false, 
    var failing_promise = new Promise(function(resolve, reject) {
      reject('Failure');
     })
    .then(() => {
      return true;
    })
    .catch(() => {
      return false;
    })
    
    passing_promise.then(()=>{
      return failing_promise
    }).then((ret) => {
      console.log('please print false.. please! ', ret)
    })
    .catch(() => {
      console.log('I Never want to make it here, but as it stands I do')
    })

    【讨论】:

    • 好的,太棒了。我有一个 mocha 测试可以做到这一点,但它会导致测试的 catch 块并且测试失败!知道为什么会发生这种情况吗?
    • 如果 failed_promise 有参数怎么办?
    • 我想我不明白。在您的示例中,failing_promise 是一个promise。 Promise 没有参数。当然,如果你有一个返回 promise 的函数,那么你可以称之为:return somethingThatRetursnAPromise(and, args);。但我只是在处理你发布的内容。
    • 这很有帮助。我正在返回一个 Mongoose.findOne().then,我认为它的行为类似于 new Promise,但我将它包装在一个 return new Promise 中,它现在可以工作了。非常感谢!
    • .then 返回一个承诺,是的。你不应该把它放在另一个承诺中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2018-01-18
    • 2018-03-31
    相关资源
    最近更新 更多