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
作为参数并返回它在我看来就像是一个反模式。