微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 异步API是否应该同步抛出?

我正在编写一个 JavaScript函数,它发出HTTP请求并返回结果的承诺(但这个问题同样适用于基于回调的实现).

如果我立即知道为函数提供的参数是无效的,那么函数应该同步抛出,还是应该返回一个被拒绝的promise(或者,如果你愿意的话,调用带有Error实例的回调)?

异步函数应始终以异步方式运行,特别是对于错误条件,这有多重要?如果您知道程序没有处于适合异步操作的状态,那么可以抛出吗?

例如:

function getUserById(userId,cb) {
  if (userId !== parseInt(userId)) {
    throw new Error('userId is not valid')
  }

  // make async call
}

// OR...

function getUserById(userId,cb) {
  if (userId !== parseInt(userId)) {
    return cb(new Error('userId is not valid'))
  }

  // make async call
}

解决方法

最终同步投掷与否的决定取决于你,你可能会找到那些争论任何一方的人.重要的是记录行为并保持行为的一致性.

我对此事的看法是你的第二个选择 – 将错误传递给回调 – 似乎更优雅.否则,您最终得到的代码如下所示:

try {
    getUserById(7,function (response) {
       if (response.isSuccess) {
           //Success case
       } else {
           //Failure case
       }
    });
} catch (error) {
    //Other failure case
}

这里的控制流程有点令人困惑.

看起来在回调中有一个if / else if / else结构并放弃周围的try / catch会更好.

原文地址:https://www.jb51.cc/js/156853.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐