2

我的问题如下:''for循环''会等待第一个等待完成,还是会立即触发所有等待消息?
另外,如果响应是“它将触发所有等待消息”,我该如何做到这一点,如果下面的代码被触发进入 for 循环,它会等待等待完成,然后继续 for 循环?

此致。

    for(let i = 0; i < parseInt(args[1]); i++) {
        message.channel.send("Please write option number " + (i+1) + ".")
        await message.channel.awaitMessages(filter, {
            max: 1,
            time: 120000
        }).then(optionmessage => {
            try {
            optionmessage.first().content.push(optionsarray)
            } catch(err) {
                return message.channel.send("Time expired.")
            }
        })
    }
4

2 回答 2

3

它会等待。成像这样的代码:

(async function () {
  for (let i = 0; i < 5; i++) {
    await new Promise(r => setTimeout(r, 1000));
    console.log(i)
  }
  console.log("end")
})()

where console.log(i)is 的那一行,只有在promise in 解决后才会执行await;所以你必须等待一秒钟才能0在控制台中拥有,然后再等待一秒钟才能拥有1,依此类推。

同样,只有在循环结束console.log("end")时才会执行(因此在本例中仅记录了 after )。for4

于 2020-06-20T17:47:29.887 回答
0

不,for循环不会等待promise解决你可以用新的“for await”循环来实现

于 2020-06-20T17:40:31.603 回答