我正在编写一个 JavaScript 函数,它发出 HTTP 请求并返回对结果的 promise (但这个问题同样适用于基于回调的实现)。
如果我立即知道为该函数提供的参数无效,该函数应该同步throw
,还是应该返回一个被拒绝的 promise(或者,如果您愿意,使用 调用回调>错误
实例)?
异步函数应该始终以异步方式运行有多重要,尤其是在错误情况下?如果您知道程序未处于适合异步操作继续的状态,是否可以throw
?
例如:
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
。
关于javascript - 异步 API 是否应该同步抛出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21887856/