首页 > 解决方案 > 完成所有异步函数后,如何确保再次调用间隔函数?

问题描述

假设我有这个功能:

var iv = setInterval(async() => {
  //timeconsuming calls
  await someFunction();
}, 8000);

我只想someFunction()在所有异步调用都完成后才调用。在里面someFunction我有这样的电话:

async someFunction(){
  await call1()
  await call2()
  await call3()
}

我怎样才能做到这一点?如果所有函数都完成,我应该使用而不是setInterval返回 a 的函数吗?boolean我怎样才能做到这一点?我应该使用Promise.all()函数来等待所有异步函数吗?

标签: javascriptnode.jspromiseasync-await

解决方案


一种选择是使用一个setTimeout在调用完成后递归调用自身的函数:

const call1 = () => new Promise(res => setTimeout(res, 200));
const call2 = () => new Promise(res => setTimeout(res, 200));
const call3 = () => new Promise(res => setTimeout(res, 200));
async function someFunction() {
  await call1();
  await call2();
  await call3();
}

const timeoutFn = async () => {
  console.log('iteration');
  await someFunction();
  setTimeout(timeoutFn, 8000);
  console.log('new timeout set');
};

timeoutFn();


推荐阅读