javascript - 完成所有异步函数后,如何确保再次调用间隔函数?
问题描述
假设我有这个功能:
var iv = setInterval(async() => {
//timeconsuming calls
await someFunction();
}, 8000);
我只想someFunction()
在所有异步调用都完成后才调用。在里面someFunction
我有这样的电话:
async someFunction(){
await call1()
await call2()
await call3()
}
我怎样才能做到这一点?如果所有函数都完成,我应该使用而不是setInterval
返回 a 的函数吗?boolean
我怎样才能做到这一点?我应该使用Promise.all()
函数来等待所有异步函数吗?
解决方案
一种选择是使用一个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();
推荐阅读
- javascript - 为什么我会收到意外的模板字符串表达式错误?
- reactjs - 如何优化 docker,并且在编译 React 应用程序时,我得到一个 commons.js(在缓存中)和一个 app.js
- python - 为什么这个while循环不会陷入无限循环?
- excel-formula - 如何在整列中查找部分数字匹配?
- opencv - libopencv_highgui.so.3.2:添加符号时出错:命令行中缺少 DSO
- reactjs - Intellisense for Jest 不能在 VS 代码中工作
- bootstrap-4 - 垂直排列的单选按钮留下空隙(Bootstrap 4)
- selenium - 如何使用生命周期步骤执行 jbehave 故事作为 PerStoriesWebDriver 步骤?
- android - 进度条已满时如何显示警报对话框
- ruby-on-rails - 资产预编译期间未找到文件错误