javascript - 如何强制 javascript 等待/阻塞,直到延迟的作业完成?

标签 javascript jquery asynchronous callback deferred

我有一些代码,例如:

var filteredData = [];

asyncFunc().done(function () {
    filteredData = blablabla...
});

return filteredData;

这是一个即将交付的项目。由于现有的代码/设计,我无法将其更改为 callback$.Deffered

是否可以强制它等到aysncFunc完成其工作,然后返回我想要的真实filteredData

编辑:

@MerynStol 你是对的。异步被发送到作业队列的最后一个(我忘了这个术语),它位于whilereturn之后。所以当while结束时,return立即执行。

我应该继续这样做还是尝试争取更多时间进行重组?

最佳答案

您可以扩展Function原型(prototype):

Function.prototype.and = Function.prototype.and || function(fn){
    this();
    var args = [].slice.call(arguments), arg;
    while (args.length) {
        arg = args.shift();
        if (arg instanceof Function) {
            arg();
        }
    }
}

并将其与 comma operator 一起使用像这样:

var filteredData = [];
return (asyncFunc.and( function () {
    filteredData = /* do stuff */
} ), filteredData);

或者如果方法done按预期工作,只需使用:

var filteredData = [];
return (asyncFunc().done(function () {
    filteredData = /*blablabla...*/
 }), filteredData);

关于javascript - 如何强制 javascript 等待/阻塞,直到延迟的作业完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16996726/

相关文章:

java - 是否可以在 Java 中模拟 Javascript 样式的原型(prototype)?

javascript - 根据值获取/过滤对象

javascript - 如何在 Firefox 和 Chrome 中触发复选框的 onfocus 事件

javascript - 如何使用 JavaScript 包含 PHP 文件并传递参数

javascript - 数组元素的 child

javascript - 产生依赖于递归 promise 的 promise

javascript - JavaScript 文件中的语法折叠在 Vim 中不起作用

jquery - 无法初始化 bootstrap-datepicker

javascript - 如何从异步调用返回响应?

Javascript缓存http获取结果