我几天来一直在努力解决这个问题,但我无法想出一个优雅的方法来处理它.这是问题所在.
我正在运行forEach循环,我需要知道什么时候一切都已完成.由于forEach循环是阻塞的,因此只需console.log在forEach循环之后删除a 就足够了,这将在forEach循环完成时运行.但是,如果forEach循环内部有任何不同步的函数,整个系统会很快崩溃,除了非常奇怪的hacky计数器和if语句之外,我无法知道循环内容何时完成.我的问题是在javascript中是否有一种优雅的方式来处理这种情况.
以下是几个例子:
在这种情况下,forEach循环可以很好地工作,因为循环中的所有内容都是同步的.
[1,2,3].forEach(function(num){
console.log("we're on " + num);
});
console.log('done counting!')
//=> we're on 1
//=> we're on 2
//=> we're on 3
//=> done counting!
Run Code Online (Sandbox Code Playgroud)
这是我们开始遇到问题的地方,作为一个基本的例子:
[1,2,3].forEach(function(num){
setTimeout(function(){ console.log(num) }, 200);
});
console.log('done counting!');
//=> done counting!
//=> we're on 1
//=> we're on 2
//=> we're on 3
Run Code Online (Sandbox Code Playgroud)
虽然这确实发生了这种情况,但我现在手上有一个不幸的问题,我需要回调一下,当我们完成计数时,除了这样的事情之外我没有其他方法可以做到:
var counter = 0;
var numbers = [1,2,3]
var log_number = function(num){
console.log("we're on " + num);
counter++;
if (counter == numbers.length) …Run Code Online (Sandbox Code Playgroud) javascript ×1