jQuery在完成时不等待所有延迟的解决
我有几个Backbone.js模型要提取,然后在所有提取完成后调用回调函数。必须先获取一个模型,然后才能获取其他模型的id。我现在的情况是:jQuery在完成时不等待所有延迟的解决,jquery,backbone.js,coffeescript,Jquery,Backbone.js,Coffeescript,我有几个Backbone.js模型要提取,然后在所有提取完成后调用回调函数。必须先获取一个模型,然后才能获取其他模型的id。我现在的情况是: doFetch: (model) -> model.set('first_model_id', @firstModel.get('id')) model.fetch() doAsyncStuff: (callbackFn) -> $.when( @firstModel.fetch() ).don
doFetch: (model) ->
model.set('first_model_id', @firstModel.get('id'))
model.fetch()
doAsyncStuff: (callbackFn) ->
$.when(
@firstModel.fetch()
).done( =>
$.when(
@doFetch @secondModel,
@doFetch @thirdModel
).done( =>
callbackFn()
)
)
问题是在@secondModel和@thirdModel回迁得到解决之前调用了callbackFn。如果我将一个doFetch调用的结果分配给一个本地变量,并在调用callbackFn之前查看它的状态,它通常是“已解决”的,但有时仍然是“挂起的”。为什么内部when/done没有等待所有这些调用的解析?如果内部的语法处于禁用状态,则会导致第三个doFetch作为第二个参数执行。用这种方式重写似乎可以解决这个问题。我也切换到了。然后,我认为在这种情况下,它会使代码更清晰
doFetch: (model) ->
model.set('first_model_id', @firstModel.get('id'))
model.fetch()
doAsyncStuff: (callbackFn) ->
$.when(
@firstModel.fetch()
).then( =>
$.when(
@doFetch @secondModel
@doFetch @thirdModel
)
).done( =>
callbackFn()
)
我刚刚删除了
@doFetch@secondModel
后面的逗号,我不知道coffeescript,但是,当我将该脚本转换为js时,我看到了一些奇怪的东西。您的内部when是这样编写的:$.when(\u this.doFetch(\u this.secondModel,\u this.doFetch(\u this.thirdModel))).done(function(){
这看起来不像您想要的格式。请注意,第三个模型的dofetch是如何在对第二个模型的调用中出现的。这会导致在只等待第二个模型完成时出现内部,而不是第三个。Go Coffeescript!