如何强制javascript等待/阻止,直到延期作业完成?

时间:2013-06-08 06:22:23

标签: javascript jquery asynchronous callback deferred

我有一些代码:

var filteredData = [];

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

return filteredData;

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

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

修改

@MerynStol你是对的。异步被发送到job queue的最后一个(我忘记了这个词),它位于whilereturn之后。因此,当while结束时,return会立即执行。

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

1 个答案:

答案 0 :(得分:0)

您可以扩展Function原型:

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