我在一个类中使用异步库,并在其中一个系列步骤中使用粗箭头会导致触发两个回调,其中带有粗箭头的函数直接调用结束步骤,而不是系列中的下一步。为什么是这样?这是一个简化的例子。
class FakeProfileRepository
getByEmail : (email, callback) ->
return callback null, email
update : (data, callback) ->
async.series
checkNull: (next) ->
if data and data.uname
next null
else
next Error("No profile to save")
checkEmailExists: (next) =>
@getByEmail 'test', (err, results) ->
if not results
next new Error("Could not find an existing profile to update")
else
next err
checkProfile: (next) ->
return next new Error('foo')
, (err, results) ->
console.log('series ended with error:' + err)
这会导致触发额外的回调, checkEmailExists 触发它对最终结果函数的回调,以及 checkProfile 步骤(正确)触发最后一个结果函数
EXPECTED:
series ended with error:foo
ACTUAL: (two callbacks fired)
series ended with error:foo
series ended with error:null
如果我使用粗箭头,或者即使我设置 self= this 并使用普通箭头,似乎会发生此错误
checkEmailExists: (done) ->
self.getByEmail data.uname, (err, results) ->
为什么会出现这个错误,有没有更好的方法来引用类方法,又不会搞乱async的控制流程?