因为程序太多的异步请求了。有时候超时什么的,虽然目前还能判断出来何时结束,但是有时候总有各种微小的概率判断不准确。也就是单靠计数无法准确的统计所有的异步都执行结束了。特别是程序业务非常复杂的时候。
如果判断不准确,我根本无法反馈给用户,程序已经执行完毕。然后用户一直干等。
所以,如果能直接判断页面所有的异步都已经结束那就很好了。有这个东西吗?
----------补充--------------
我目前是使用async/waterfall实现的,代码如下
function test(i){
waterfall([
//步骤1
function(callback) {
thread(function (){
//callback(null, 'a');
}, 800);
},
//步骤2
function(a, callback){
dlog('执行到步骤2'+a);
}
], function (err, a, b) {
dlog('任务结束'+a+b);
dlog(err);
});
}
function thread(callBack, time){
setTimeout(function(){
callBack();
}, time)
}
如上,正常情况下的流程: 步骤1--步骤2--任务结束
任务结束,计数+1,比如任务总数=10时,计数=10即可判断任务全部结束。
现在问题来了。假如步骤1的那个异步,发生了异常,没有回调。无法进行到下一步,自然也执行不到结束那个位置。
流程就这样中断了。
所以计数永远小于10.任务永远无法结束。
至于为什么发生没有回调的情况。读取网页,下载图片等一系列的操作,之前没有设置超时时间,读取的异步好像永远都不回调,现在设置超时时间才没有这个问题。
因为使用的是第三方的模块,这类问题依然会有概率发生,至于为什么,估计得研究人家的源码才能找到答案了。
PHP中文网2017-04-17 14:37:52
弄个setInterval循环判断某个你最终加载的dom有没有生成或者dom的高度是不是达到预期吧,靠浏览器端来判断,你node只是服务端或中间件提供不了这个功能