我有三个功能,我想一个接一个地执行。我的三个函数是A_rray()
,Counter()
,Main_Function(N,A)
,我有一个基于Main_Function(N,A)
的{{1}}的条件,一旦执行了该部分,那么我想等待A_rray()
如下-
Counter()
功能是-
if (A_rray().length!=0){
Main_Function(500,A_rray());
}
else{console.log('Number = ',A_rray().length)}
Counter();
但是问题是,首先执行function A_rray(){ D=[1,2];return D;}
function Counter(){console.log('Done!');}
function Main_Function(N,A){
var counter = 0;
var interval = setInterval(function() {
counter++;
if (counter === A.length) {
clearInterval(interval);
}
console.log(counter, 'iteration')
}, N) }
函数,然后执行条件和其他部分,这可能是因为Counter()
。
我尝试了一些使用Stack Overflow编写的方法,但是由于我是初学者,所以这些方法不起作用。
是否有一种简单的方法可以基于setInterval
执行第一个功能Main_Function(N,A)
,然后有效地执行Array()
?
答案 0 :(得分:1)
一种更简单的方法是编辑MAIN_FUNCTION
,以便从内部调用Counter
。
function MAIN_FUNCTION(N,A) {
var counter = 0;
var interval = setInterval(function() {
counter++;
console.log(counter, 'iteration');
if (counter === A.length) {
clearInterval(interval);
Counter();
}
}, N);
}
然后摆脱执行位中的其他Counter
调用
这将确保Counter
仅在interval
的最后一次迭代之后运行
一些注意事项:
Counter
仅在记录日志,您可以简单地用日志调用替换该调用Array
会覆盖javascript的默认函数,它是Array
类的构造函数答案 1 :(得分:1)
您可以返回Promise
,如果从clearInterval
调用Main_Function(N,A)
的话,它将解决。因此,您可以等待Main_Function(N,A)
完成,然后根据需要执行Counter()
。
(async() => {
if (Array().length != 0) {
await Main_Function(500, Array());
} else {
console.log('Number = ', Array().length)
}
Counter();
})();
function Array() {
D = [1, 2];
return D;
}
function Counter() {
console.log('Done!');
}
function Main_Function(N, A) {
return new Promise(resolve => {
var counter = 0;
var interval = setInterval(function() {
counter++;
if (counter === A.length) {
clearInterval(interval);
resolve();
}
console.log(counter, 'iteration');
}, N);
});
}