我有一些异步代码,其中对于给定的延迟对象 defObj
,我附加了几个我想要执行的函数,如下所示:
$.when(defObj).done(function(){ console.log('callback 1'); });
$.when(defObj).done(function(){ console.log('callback 2'); });
$.when(defObj).done(function(){ console.log('callback 3'); });
(在实际代码中,这些附加在我调用来初始化页面的几个不同函数中。)
在其他一些异步代码完成后,我想解析延迟对象并触发所有回调。我手动解析回调:
defObj.resolve();
在 Chrome 中,这工作得很好。延迟对象解析并触发所有回调。在 Firefox 中,我在第二个回调中收到某种错误(或者至少,我假设我这样做了,因为它没有显示在控制台中。)此错误会阻止其余延迟对象解析,并停止代码的执行。我尝试将代码放入 try/catch block 中:
try{ defObj.resolve(); } catch(e){ console.error(e) };
但是 Firefox 没有进入 catch block 。
有没有办法阻止 Firefox 在完成所有延迟回调之前退出代码执行?
如果这看起来不清楚,请告诉我,我会尽力清理它。
最佳答案
我尝试将代码封装在 try{}catch(){}
block 中,但无济于事。最终起作用的是使用时间延迟为零的 window.setTimeout
调用将中断为异步代码块的代码移动,如下所示:
$.when(defObj).done(function(){ console.log('callback 1'); });
$.when(defObj).done(function(){
window.setTimeout(function(){console.log('callback 2'); }, 0);
});
$.when(defObj).done(function(){ console.log('callback 3'); });
这会将导致问题的代码从页面其余部分的流程中取出,从而阻止其阻塞执行。我仍然不知道是什么导致 Firefox 停止代码执行,但这是一个不错的解决方法。
关于javascript - 阻止 Firefox 退出延迟对象的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25633909/