在函数中验证参数并返回错误是一种常见的做法。
然而,在 JavaScript 的回调函数中,比如:
function myFunction(num, callback) {
if (typeof num !== 'number') return callback(new Error('invalid num'))
// do something else asynchronously and callback(null, result)
}
我写了很多类似这样的函数,但我想知道是否存在潜在的危害。因为在大多数情况下,调用者会假设这是一个异步函数,并且回调函数将在函数调用后立即执行。但如果某些参数无效,函数将立即调用回调函数。因此,调用者必须小心处理这种情况,即意外的执行顺序。
我想听一些关于这个问题的建议。我应该仔细假设所有异步回调可能会立即执行吗?还是我应该使用类似setTimeout(..., 0)的东西来将同步事物转换为异步事物。或者有一个更好的解决方案我不知道。谢谢。
let p = new Promise(resolve => { throw new Error(); })
),它会被 Promise 构造函数转换为拒绝,这支持了你关于单一错误通道的论点,因为该 API 的设计经历了深思熟虑和实践… - T.J. Crowder