gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:50:40 26 4
gpt4 key购买 nike

我正在编写一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com