mat*_*nfu 10 javascript error-handling callback
验证参数并返回函数中的错误是很常见的.
但是,在JavaScript回调函数中,例如:
function myFunction(num, callback) {
if (typeof num !== 'number') return callback(new Error('invalid num'))
// do something else asynchronously and callback(null, result)
}
Run Code Online (Sandbox Code Playgroud)
我写了很多像这样的函数,但我想知道是否存在可能有害的东西.因为在大多数情况下,调用者假定这是一个异步函数,并且回调将在函数调用之后的代码之后执行.但是如果某些参数无效,该函数将立即调用回调.因此调用者必须小心处理这种情况,即一个意外的执行序列.
我想听听有关这个问题的一些建议.我应该仔细假设所有异步回调都可以立即执行吗?或者我应该使用类似setTimeout(...,0)的东西将同步事物转换为异步事物.或者有一个我不知道的更好的解决方案.谢谢.
一个API应当记录,它会调用回调要么同步(像Array#sort)或异步(像Promise#then),然后总是服从,所记录的保证。它不应该混搭。
因此,是的,如果您有一个通常会异步调用回调的函数,则无论它为什么进行调用,它都应始终异步调用它。
jQuery中有一个很好的例子:当jQuery首次添加“ deferred”对象时,如果已解决延迟,则它们将同步调用回调,否则将异步调用。这是许多混乱和错误的根源,这也是为什么ES2015的承诺保证then和catch回调始终被异步调用的部分原因。
如果可能,并且与其余代码库保持一致,请考虑使用Promises而不是简单的回调。承诺为异步操作(以及与同步操作的互操作)提供了非常清晰,简单,有保证的语义和可组合性。
| 归档时间: |
|
| 查看次数: |
15082 次 |
| 最近记录: |