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

Пишу бота телеграм на 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
  }
})
  • Вопрос задан
  • 549 просмотров
Решения вопроса 1
Нужно держать состояние диалога, индивидуальное для каждого пользователя.

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

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

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

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

Войти через TM ID
Похожие вопросы
D2C.io Екатеринбург
от 70 000 руб.
Fairlayer Санкт-Петербург
от 150 000 до 350 000 руб.
23 окт. 2018, в 14:55
1000 руб./за проект
23 окт. 2018, в 14:51
60000 руб./в месяц