问题描述
我有以下循环:
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到同时运行,这样一个初始化不从开始阻止其他。