我制作了一个示例函数'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
...
答案 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()