完成所有异步函数后,如何确保间隔函数再次被调用?

时间:2018-07-05 09:53:33

标签: javascript node.js promise async-await

假设我具有此功能:

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

仅当所有异步调用均已完成时,我才想呼叫someFunction()。在someFunction内部,我有这样的电话:

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

我该如何实现?如果所有函数都完成了,我应该使用返回setInterval的函数而不是boolean吗?我该如何实现?我应该使用Promise.all()函数来等待所有异步函数吗?

2 个答案:

答案 0 :(得分:1)

一种选择是使用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();

答案 1 :(得分:0)

我会做类似以下的事情-

function someFunction() {
    Promise.all([promiseCall1, promiseCall2, promiseCall3]).then(values => {
        if(!breakCondition)
            someFunction();
    });
}

虽然还没有测试。