Как отложить выполнение кода пока не будет получен ответ от сервера?

Пишу бота телеграм на Nodejs. Бот принимает сообщения. Он принял сообщение типа start, потом он принял данные, потом он принял сообщение типа end. Когда он принимает данные между start и end, нужно данные отправить на сервер и получить ответ, а когда нажимает end нужно эти данные использовать. Проблема в том, что пользователь может отправить end слишком быстро и тогда данные не успеют обработаться. Вот фрагмент кода (таких if/else там много. Я так понимаю, что нужно использовать промисы или await/async, но не могу понять как это делается в такой конструкции

bot.on('message', msg => {
  if (msg.text == "start") {
    ....
  } else if (msg.text == "send" ) {
    bot.getFileLink(file.file_id).then(url => {
      cloudinary.uploader.upload(url, function(res) { 
        files.push(res.url);//1
      })  
    }) 
  } else if (msg.text == "end") {
    console.log(‘files = ', files);//2
  }
})
  • Вопрос задан
  • 601 просмотр
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Нужно держать состояние диалога, индивидуальное для каждого пользователя.

Команды пользователя складывать в очередь, и как-то помечать, «где мы сейчас»: ждём очередную команду от пользователя или ждём ответа от сервера.

Состояние можно держать в Redis, MySQL или другой БД. Входящее сообщение от пользователя содержит его from.id – по нему идентифицируется диалог и берется его состояние.

Промисы и прочая асинхрота тут не поможет, так как дело шире, чем один запрос.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dest2r4
Long poll
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы