在同步方法中等待异步方法?

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;
}