1

我有一些代码,例如:

var filteredData = [];

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

return filteredData;

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

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

编辑:

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

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

4

1 回答 1

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

并将其与逗号运算符一起使用,如下所示:

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

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

var filteredData = [];
return (asyncFunc().done(function () {
    filteredData = /*blablabla...*/
 }), filteredData);
于 2013-06-08T06:50:53.093 回答