【发布时间】:2014-03-20 05:14:33
【问题描述】:
我正在编写一个 JavaScript 函数,它发出一个 HTTP 请求并返回一个对结果的承诺(但这个问题同样适用于基于回调的实现)。
如果我立即知道为函数提供的参数无效,函数 throw 是否应该同步返回,或者它是否应该返回被拒绝的承诺(或者,如果您愿意,使用 Error 实例调用回调)?
异步函数应该始终以异步方式运行有多重要,尤其是在错误情况下?如果您知道程序不处于适合异步操作进行的状态,可以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
}
【问题讨论】:
-
请注意,在第二个示例中,您不应同步调用 cb,而应使用
process.nextTick或setImmediate。
标签: javascript asynchronous promise api-design