Javascript 这个JQuery是否正常工作?

Javascript 这个JQuery是否正常工作?,javascript,jquery,callback,jquery-deferred,Javascript,Jquery,Callback,Jquery Deferred,下面是有问题的代码行: $.when(dashboard.update.call(this)).then(dashboard.updateCompleted); 问题是,dashboard.update调用另一系列5个左右的函数。dashboard.update是否在调用完这些函数后或这些函数实际完成后完成 我之所以问这个问题,是因为它似乎是在从dashboard.update调用函数之前调用的dashboard.update。有办法解决这个问题吗?要使用when(),必须将延迟对象传递给wh

下面是有问题的代码行:

$.when(dashboard.update.call(this)).then(dashboard.updateCompleted);
问题是,
dashboard.update
调用另一系列5个左右的函数。
dashboard.update是否在调用完这些函数后或这些函数实际完成后完成

我之所以问这个问题,是因为它似乎是在从
dashboard.update
调用函数之前调用的
dashboard.update
。有办法解决这个问题吗?

要使用when(),必须将延迟对象传递给when()中的函数

我刚刚看到了和你非常相似的情况。我为使代码正常工作所做的是:

$.when(func1($.Deferred()),
       func2($.Deferred()),
       func3($.Deferred()),
       func4($.Deferred())
).done(function() {
    alert('Finished!');
}
在每个函数中,必须调用resolved()或rejected()来通知$.when()。比如说,

function func1(def) { 
    A_async_call(function (status) {
        if (status == OK) {
           def.resolve(); /// Tell $.when, this function finished
        } else {
           def.reject();  /// tell $.when, a function failed
        }
    })
    return def; // return defered object to when, for later use
}

这取决于这些函数是否使用异步执行。。你必须向我们展示dashboard.update()
的功能(它是否有异步操作)以及它是否返回一个只有在异步操作完成时才能解析的承诺
$。when().then()
只能在
仪表板内部执行异步操作。如果
仪表板,则update()
将返回仅在异步操作完成时才解析的承诺。而且,如果这样做,您也不需要
$.when()
,因为您可以直接使用
dashboard.update.call(this)。然后(…)
直接调用。我不确定dashboard.update中的函数是否异步。。。不过,它们是一系列ajax请求。@Hubrid请参阅本文。谢谢,AJAX的名字中有async。。。所以,是的,这些函数确实使用异步执行。您几乎从不传递要解决的延迟。将
def
作为参数并返回它在我看来就像是一个反模式。