我有一些代码,例如:
var filteredData = [];
asyncFunc().done(function () {
filteredData = blablabla...
});
return filteredData;
这是一个即将交付的项目。由于现有的代码/设计,我无法将其更改为 callback
或 $.Deffered
。
是否可以强制它等到aysncFunc
完成其工作,然后返回我想要的真实filteredData
?
编辑:
@MerynStol 你是对的。异步被发送到作业队列
的最后一个(我忘了这个术语),它位于while
和return
之后。所以当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/