jQuery完成后不等待所有延迟解决

时间:2014-01-16 18:37:22

标签: jquery backbone.js coffeescript

我想要获取几个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调用的结果分配给本地var并在调用callbackFn之前查看其状态,它通常是“已解决”但有时仍处于“挂起”状态。为什么内部何时/不等待所有这些调用解决?

1 个答案:

答案 0 :(得分:0)

你是关闭内部的语法,它导致第三个doFetch作为第二个参数完成。以这种方式重写它似乎解决了它。我也改用.then,因为我认为在这种情况下它会使代码更清晰。

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

之后删除了逗号