验证参数并返回函数中的错误很常见。JavaScript回调错误处理
然而,在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)的东西来将同步事物转换为异步事件。或者有更好的解决方案,我不知道。谢谢。
我删除了我的downvote。我猜测函数被调用的方式严重到足以引发生产,而且不应该在生产中发生。 –
@PatrickRoberts:我已经删除了答案的这一部分,这与问题并不相关。我可以看到你的观点,尽管我还没有同意它。我需要更多地考虑它。我注意到如果你在设置一个ES2015 Promise('let p = new Promise(resolve => {throw new Error();})')的时候抛出它,它会被Promise构造器转换为拒绝,赞成单一错误渠道的观点,因为这种API的设计思想和经验...... –
我的方法也是不正确的。正如评论者指出的那样,callstack是非常重要的考虑事项,特别是当开发人员使用你的函数试图无限期地重试时,如果你的函数在出现错误时是同步的,最终会导致一个stackoverflow。 –