Что вернет a для l oop in NodeJS с await? - PullRequest
2 голосов
/ 20 июня 2020

Мой вопрос следующий: будет ли '' for l oop '' ждать завершения первого await или запускать все сообщения await сразу?
Также, если ответ будет '' он будет запускать все сообщения await '', как я могу сделать так, чтобы, если приведенный ниже код запускается в for l oop, он ждет завершения await и продолжает для l oop?

С уважением.

    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.")
            }
        })
    }

Ответы [ 2 ]

3 голосов
/ 20 июня 2020

Подождет. Представьте себе такой код:

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

Строка, где находится console.log(i), она будет выполнена только после того, как обещание в await будет разрешено; поэтому вам придется подождать одну секунду, чтобы в консоли отобразилось 0, затем еще одну секунду, чтобы получить 1, и т. д.

Таким же образом, console.log("end") будет выполняться только когда заканчивается for l oop (в этом примере только после входа 4).

0 голосов
/ 20 июня 2020

Нет, поскольку l oop не будет ждать разрешения обещания Вы можете добиться этого с помощью нового «for await» l oop

...