javascript - 阻止 Firefox 退出延迟对象的执行

标签 javascript jquery firefox asynchronous

我有一些异步代码,其中对于给定的延迟对象 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/

相关文章:

CSS:可滚动嵌套表,在 FF 中有效,在 IE 中失败

javascript - 如何使用 Firefox addons sdk 的 getThumbnail() Tab API 获取当前选项卡的全宽屏幕截图

javascript - Angular JS : ng-repeat doesn't work

javascript - 从静态图像 URL 中提取 Flickr 照片 ID

javascript - 禁用任何网站中的所有超链接

javascript - PrototypeJS 中的委托(delegate)()

javascript - 更改 bootstrap 4 下拉菜单选项以在 html 中显示和隐藏 div

javascript - 更改代码以在 javascript 中获取竖线

Javascript 粘性菜单问题

javascript - Knockout hasFocus 与数字输入的绑定(bind)在 Firefox 上不起作用