Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery在完成时不等待所有延迟的解决_Jquery_Backbone.js_Coffeescript - Fatal编程技术网

jQuery在完成时不等待所有延迟的解决

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

我有几个Backbone.js模型要提取,然后在所有提取完成后调用回调函数。必须先获取一个模型,然后才能获取其他模型的id。我现在的情况是:

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!