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

标签 javascript jquery asynchronous jquery-deferred deferred

情况是这样的:

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

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

这很有效。

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

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

看来 .done 回调中的代码是在 foo1()foo2() 结束时执行的 而部分 View 未完全加载

我怎么能告诉 foo2() 等待部分 View 加载结束,然后再说“好的,我完成了我的工作,你可以继续”?

最佳答案

不幸的是,load() 没有返回一个 promise 或 deferred 对象。相反,要使这项工作正常进行,您可以从 foo2() 手动返回一个延迟对象,您在 load() 完成后解析该对象。像这样:

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

关于javascript - 在同步方法中等待异步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53104772/

相关文章:

javascript - 异步脚本加载回调

JavaScript:恢复同步的异步函数

javascript - HTML javascript onclick 事件不适用于输入类型提交

javascript - 结合传说中的系列

javascript - 如何使用 javascript 将 css-grid 元素放入网格容器中

jquery - 制作一个可重新排序、灵活调整大小的网站

javascript - 2 个 javascript 插件不能一起工作

javascript - 使用 jquery 对 pan 数字格式的文本框进行验证

javascript - 使用 jQuery 加载页面时的配色方案?

java - Scala:如何使用 Java 回调 API