setInterval循环不等待

时间:2019-08-03 14:21:00

标签: javascript async-await setinterval

我制作了一个示例函数'webrequest()',假设这是一个需要2才能获得响应的webrequest。我想在收到每个回复后发送一个新的webrequest。当我运行te loop时,它只是不等待,而是发送另一个webrequest。

我不知道我做错了什么。我找不到有关此问题的帖子(也许我搜索错误)。

function webrequest() {
    return new Promise((resolve) => {
        setTimeout(()=>{
            resolve()
        },2000)
    })
}

function loopTest() {
setInterval(async () => {
    console.log('Welcome')
    await webrequest();
    console.log('Bye')
},10)
}

loopTest()

所以输出应该是。

Welcome
(2 seconds timeout)
Bye
Welcome
(2 seconds timeout)
Bye
...

2 个答案:

答案 0 :(得分:1)

然后使用短时间运行setInterval是没有意义的。只需使用循环:

  (async function() {
     while(true) {
       console.log('Welcome')
       await webrequest();
       console.log('Bye')
     }
})();

答案 1 :(得分:0)

如上所述,如果您不停止setInterval,它将无法很好地履行诺言。如果您清除间隔,可以像这样使用它:

似乎适合情况的是setTimeout。为了与async..await一起使用,它应该是side promise。

function first(){
  console.log('Welcome')
}
function second(){
  console.log('Bye')
}
async function loopTest(){
  await new Promise(resolve => setTimeout(() => resolve(first()), 1000));
  await new Promise(resolve => setTimeout(() => resolve(second()), 1000));
}

loopTest()