从数组发送有序数据

Send ordered data from an array

如何从 Telegram Bot 中的数组发送有序数据?

比如我在一个数组中有text1,text2,text3, 但它像 text3text1text2 一样发送它们,所以不是按原来的顺序。

这是我的代码:

function sendAllText(msg, opts) {
   if (locale.keyboards[msg.text].text) {
      var i,j,tempstring;
      for (i=0,j=locale.keyboards[msg.text].text.length; i<j; i++) {
          tempstring = locale.keyboards[msg.text].text[i];
          bot.sendMessage(msg.chat.id, tempstring, opts);
      }
   }
}

函数是这样调用的:

sendAllText(msg, opts);

根据 documentationsendMessage returns 一个承诺:有了这个,您可以知道消息何时发送,然后发送下一个,...等等:

function sendAllText(msg, opts) {
   if (locale.keyboards[msg.text].text) {
      var i,j,tempstring, promise;
      promise = Promise.resolve();
      for (i=0,j=locale.keyboards[msg.text].text.length; i<j; i++) {
          tempstring = locale.keyboards[msg.text].text[i];
          promise = promise.then(bot.sendMessage.bind(bot,msg.chat.id, tempstring, opts));
      }
   }
}

或者,您可以将所有消息合并为一个,然后只发送合并后的消息。

这是 trincot 回答的另一个版本,试图提高可读性。

function sendAllText(msg, opts) {
  var textArr = locale.keyboards[msg.text].text;
  var promise = Promise.resolve();

  if (textArr.length) {
    textArr.forEach(function(value) {
      promise.then(function() {
        bot.sendMessage(msg.chat.id, value, opts);
      });
    });
  }
}