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

时间:2018-11-01 15:51:44

标签: javascript jquery asynchronous jquery-deferred deferred

这里是情况:

我有2个JS函数,我需要等待这2个方法来做其他事情。
所以我写了:

$.when(foo1(), foo2()).done(function () {
    //do something
});

这很好。

但是,在某些情况下,foo2()必须在我的DOM中加载部分视图:

function foo2() {
    $("#bar").load('/controller/action')
}

似乎.done回调中的代码在foo1()foo2()的末尾执行,而部分视图没有完全加载。 / p>

如何说foo2()等待部分视图加载结束,然后说“好,我完成工作,可以继续”?

1 个答案:

答案 0 :(得分:3)

很遗憾,load()不会返回承诺或延期对象。相反,要进行此工作,您可以从foo2()中手动返回一个延迟的对象,您可以在load()完成后解析该对象。像这样:

function foo2() {
  var deferred = $.Deferred()
  $("#bar").load('/controller/action', function() {
    deferred.resolve();
  });
  return deferred;
}