我有以下循环:
while (true) {
await f();
await g();
}
其中f
和g
的定义如下:
async function f() {
await Promise.all([SOME_REQUEST_F, sleep(1000)])
}
async function g() {
await Promise.all([SOME_REQUEST_G, sleep(5000)])
}
sleep
的定义如下:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
我的意图是让SOME_REQUEST_F
每隔一秒等待一次,SOME_REQUEST_G
每隔五秒等待一次,因此将它们包装在f
和g
中。
但是,当前g
阻止了循环中f
的重新等待。
如何定义sleep
,以便在g
中使用它会阻止g
的重新执行,而不会阻止f
的重新执行?有没有更好的方法来做我想做的事?
答案 0 :(得分:6)
改为使用两个while
循环:
(async () => {
setTimeout(async () => {
while (true) {
await f();
}
});
while (true) {
await g();
}
})();
需要setTimeout
允许两个while
同时运行,以便一个初始化不会阻止另一个启动。