Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制javascript等待/阻止直到延迟的作业完成?_Javascript_Jquery_Asynchronous_Callback_Deferred - Fatal编程技术网

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

如何强制javascript等待/阻止直到延迟的作业完成?,javascript,jquery,asynchronous,callback,deferred,Javascript,Jquery,Asynchronous,Callback,Deferred,我有一些代码,比如: var filteredData = []; asyncFunc().done(function () { filteredData = blablabla... }); return filteredData; 这是一个即将交付的项目。由于现有代码/设计,我无法将其更改为callback或$.Deffered 有没有可能强迫它等到aysncFunc完成它的工作,然后返回我想要的真正的Filteredata 编辑: @梅林斯托尔,你说得对。异步已发送到作业队列

我有一些代码,比如:

var filteredData = [];

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

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

有没有可能强迫它等到aysncFunc完成它的工作,然后返回我想要的真正的Filteredata

编辑:

@梅林斯托尔,你说得对。异步已发送到作业队列的最后一个,我忘记了术语,它位于while和return之后。因此,当while结束时,返回并立即执行

我应该继续这样做,还是争取更多的时间重新构建?

您可以扩展功能原型:

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);
或者,如果方法按预期工作,只需使用:

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

我认为这是不可能的——它需要您试图避免的重构。是jquery代码吗?你能用$.whenasyncFunc.done callback call包装一下吗?@Baldrs我不能在这里使用callback或deferred。这就是为什么它如此令人讨厌的原因@我同意你的看法。我提出这个问题只是因为我没有发现有人在谷歌之后证实这是不可能的。也许会在stackoverflow上发生一些黑暗魔法要么要求更多的时间进行重构,省去这一特殊功能,要么看看是否可以在不使用indexeddb和/或websql的情况下实现这部分代码,在这之后,您可能可以使用sync xmlhttprequest实现所有同步。localStorage是同步的,因此也可以将关键数据存储在那里。这将只运行asyncFunc,然后直接调用匿名函数。毫无意义。问题是:是否有可能强迫它等到aysncFunc完成了它的工作,然后返回我想要的真正的过滤数据?不是吗?不,他想等待返回,直到延迟的工作完成,-不可能。