问题描述
我有以下循环:
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
?
有没有更好的方法来做我想要的?
1楼
CertainPerformance
6
已采纳
2019-03-02 23:12:06
改为使用两个while
循环:
(async () => {
setTimeout(async () => {
while (true) {
await f();
}
});
while (true) {
await g();
}
})();
该setTimeout
存在是需要让双方while
s到同时运行,这样一个初始化不从开始阻止其他。