javascript - 我应该在异步函数中抛出错误还是返回被拒绝的 promise ?

标签 javascript node.js promise

<分区>

我正在履行 AWS JS SDK 提供的 promise .当我创建一个包装 AWS SDK 的异步函数时,我正在做的事情的要点如下所示:

module.exports.myCustomFunction = input => {

    if (badInput) {
        throw new Error('failed') // <-- This is they key line
    }

    return sns.createTopic(someParams).promise()
}

// The caller looks like this:
myModule.myCustomFunction(someInput).then(result => {
    // carry on
})
.catch(err => {
    // do something with the error
})

有人找到我,他说我永远不应该在这些基于 promise 的函数中抛出错误。他们建议改为返回 Promise.reject('failed')。老实说,我对 promises 还不是很了解,所以他们的解释有点让我难以理解。

最佳答案

throw Promise/Promise 链中将自动导致该 Promise/Promise 链被拒绝。

const myFunc = input => {
  return new Promise((resolve, reject) => {
    if (badInput) {
      throw new Error('failed')
    }

    return resolve(sns.createTopic(input).promise())
  })
}

return myFunc('some input')
  .then(result => { 
    // handle result
  })
  .catch(err => { console.log(err) }) // will log 'failed'

但是,您的 myCustomFunction 没有包装在 Promise 中,它在 sns.createTopic().promise( )。要创建并返回一个已处于拒绝状态的 Promise,您可以使用 Promise.reject(new Error('failed')) 而不是 throw

关于javascript - 我应该在异步函数中抛出错误还是返回被拒绝的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45490346/

相关文章:

javascript - 过渡破坏了 SVG 旋转

javascript - 如何从单独的 php 文件 onClick 执行 php 函数

node.js/Jade - 如何预编译 jade 文件并缓存它?

node.js - shopify-express 续集自定义策略

javascript - promise Q 无法始终如一地工作

javascript - HTML5 组件截图

javascript - 剑道网格 : add new row with nested object stopped working

node.js - Slack 中用于按钮交互的 POST 正文为空

javascript - 如何在ajax调用正在进行时插入加载gif

javascript - 尝试在 Gatsby 框架中的按键事件上播放音频文件时如何修复 Promise {<pending>}?