首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用`Promise.resolve`进行多函数排序

使用`Promise.resolve`进行多函数排序
EN

Stack Overflow用户
提问于 2017-04-26 05:08:58
回答 2查看 69关注 0票数 0

我有3个功能,每个功能都与Promise.resolve一起工作,

如何为所有函数使用Promise.resolve?,当我调用所有函数时,这些函数都没有排序

代码语言:javascript
复制
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));
      }
   }
}
function sendAllPhoto(msg, opts) {
   if (locale.keyboards[msg.text].photo) {
      var i,j,tempstring, promise;
      promise = Promise.resolve();
      for (i=0,j=locale.keyboards[msg.text].photo.length; i<j; i++) {
          tempstring = locale.keyboards[msg.text].photo[i];
          promise = promise.then(bot.sendPhoto.bind(bot,msg.chat.id, tempstring, opts));
      }
   }
}

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

当我调用函数时,我的数据没有排序,我使用的是Node电报bot Api

代码语言:javascript
复制
bot.onText(/\/love/, function onLoveText(msg) {
  const opts = {
    reply_to_message_id: msg.message_id,
    reply_markup: JSON.stringify({
      keyboard: [
        ['Yes, you are the bot of my life ❤'],
        ['No, sorry there is another one...']
      ]
    })
  };
  sendAllText(msg, opts);
  sendAllPhoto(msg, opts);
  sendAllVideo(msg, opts); 
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-26 06:33:58

在这三个函数的末尾,在它们的循环之后添加:

代码语言:javascript
复制
return promise;

还请确保在函数开始时定义诺言变量,因此当if条件不为真时也会定义该变量。

例如,在第一个函数中:

代码语言:javascript
复制
function sendAllText(msg, opts) {
   var promise = Promise.resolve(); // <----
   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];
          promise = promise.then(bot.sendMessage.bind(bot,msg.chat.id, tempstring, opts));
      }
   }
   return promise; // <-----
}

然后在最后一段代码中,连锁您的承诺:

代码语言:javascript
复制
sendAllText(msg, opts)
    .then(sendAllPhoto.bind(null, msg, opts))
    .then(sendAllVideo.bind(null, msg, opts)); 
票数 2
EN

Stack Overflow用户

发布于 2017-04-26 05:34:24

您可以使用$q.all,$q.all()方法接受一个对象或一系列承诺,等待所有承诺解析(),或者等待其中一个承诺拒绝(),然后执行提供的回调函数。解析函数返回的值取决于向所有()提供承诺的方式。

例子-

代码语言:javascript
复制
var  promises = [sendAllText(), sendAllPhoto(), sendAllVideo()];

$q.all(promises).then((values) => {
    console.log(values[0]); // value Text
    console.log(values[1]); // value Photo
    console.log(values[2]); // value Video
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43625497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档