停止firefox退出延迟对象的执行

Stop firefox from exiting execution of deferred objects

本文关键字:执行 对象 延迟 firefox 退出 停止      更新时间:2023-09-26

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

在铬合金中,这很好用。延迟对象解析,并且所有回调都启动。在firefox中,我在第二次回调中遇到了某种错误(或者至少,我认为我会这样做,因为它不会显示在控制台中。)这个错误阻止了其他延迟对象的解析,并停止了代码的执行。我尝试将代码放入try/catch块:

try{ defObj.resolve(); } catch(e){ console.error(e) };

但萤火虫没有进入捕捉区。

有没有办法在firefox完成所有延迟回调之前阻止它退出代码执行?

如果这看起来不清楚,请告诉我,我会尽力清理。

我尝试将代码封装在try{}catch(){}块中,但没有成功。最终起作用的是,通过时间延迟为零的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停止代码执行,但这是一个不错的方法