Search code examples
javascriptnode.jsasync-awaitnode-telegram-bot-api

How do I convert this chained promises code with callback to async/await


How do I convert this chained promises code with callback to async/await

I have no idea on how to go about converting this code to async/await so that its more readable

var responseCallbacks = {};

bot.onText(/\/something/, async (msg) => {
  var callback = responseCallbacks[msg.chat.id];
  if (callback) {
    delete responseCallbacks[msg.chat.id];
    return callback(msg);
  }
  bot.sendMessage(msg.chat.id, "something").then(() => {
    responseCallbacks[msg.chat.id] = (answer) => {
      var something = answer.text;

      bot.sendMessage(msg.chat.id, "something else").then(() => {
        responseCallbacks[msg.chat.id] = (answer) => {
          var somethingElse = answer.text;
          console.log(something, somethingElse);
        };
      });
    };
  });
});

Solution

  • Here is what you want:

    var responseCallbacks = {};
    
    bot.onText(/\/something/, async (msg) => {
        var callback = responseCallbacks[msg.chat.id];
        if (callback) {
            delete responseCallbacks[msg.chat.id];
            return callback(msg);
        }
    
        await bot.sendMessage(msg.chat.id, "something");
        responseCallbacks[msg.chat.id] = async (answer) => {
            var something = answer.text;
    
            await bot.sendMessage(msg.chat.id, "something else");
            responseCallbacks[msg.chat.id] = (answer) => {
                var somethingElse = answer.text;
                console.log(something, somethingElse);
            };
        };
    });