我有一些代码:
var filteredData = [];
asyncFunc().done(function () {
filteredData = blablabla...
});
return filteredData;
这是一个即将推出的项目。由于现有的代码/设计,我无法将其更改为callback
或$.Deffered
。
是否可以强迫它等到aysncFunc
完成其工作,然后返回我想要的真实filteredData
?
修改
@MerynStol你是对的。异步被发送到job queue
的最后一个(我忘记了这个词),它位于while
和return
之后。因此,当while
结束时,return
会立即执行。
我应该继续这样做还是试着花更多时间进行重组?
答案 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);