在同步方法中等待异步方法?
Wait for an asynchronous method inside a synchronous method?
情况如下:
我有2个JS函数,我需要等待这2个方法来做其他事情。
所以我写了:
$.when(foo1(), foo2()).done(function () {
//do something
});
这个效果很好。
但是,在某些情况下 foo2()
必须在我的 DOM 中加载部分视图:
function foo2() {
$("#bar").load('/controller/action')
}
似乎 .done
回调中的代码在 foo1()
和 foo2()
的末尾执行 而局部视图未完全加载.
如何让foo2()
等待部分视图加载结束,然后再说"Ok I finished my job, you can continue"?
不幸的是 load()
没有 return promise 或 deferred 对象。相反,要使这项工作正常进行,您可以手动 return 来自 foo2()
的延迟对象,您可以在 load()
完成后解析该对象。像这样:
function foo2() {
var deferred = $.Deferred()
$("#bar").load('/controller/action', function() {
deferred.resolve();
});
return deferred;
}
情况如下:
我有2个JS函数,我需要等待这2个方法来做其他事情。
所以我写了:
$.when(foo1(), foo2()).done(function () {
//do something
});
这个效果很好。
但是,在某些情况下 foo2()
必须在我的 DOM 中加载部分视图:
function foo2() {
$("#bar").load('/controller/action')
}
似乎 .done
回调中的代码在 foo1()
和 foo2()
的末尾执行 而局部视图未完全加载.
如何让foo2()
等待部分视图加载结束,然后再说"Ok I finished my job, you can continue"?
不幸的是 load()
没有 return promise 或 deferred 对象。相反,要使这项工作正常进行,您可以手动 return 来自 foo2()
的延迟对象,您可以在 load()
完成后解析该对象。像这样:
function foo2() {
var deferred = $.Deferred()
$("#bar").load('/controller/action', function() {
deferred.resolve();
});
return deferred;
}