假设我具有此功能:
var iv = setInterval(async() => {
//timeconsuming calls
await someFunction();
}, 8000);
仅当所有异步调用均已完成时,我才想呼叫someFunction()
。在someFunction
内部,我有这样的电话:
async someFunction(){
await call1()
await call2()
await call3()
}
我该如何实现?如果所有函数都完成了,我应该使用返回setInterval
的函数而不是boolean
吗?我该如何实现?我应该使用Promise.all()
函数来等待所有异步函数吗?
答案 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();
});
}
虽然还没有测试。