Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理嵌套承诺的结果_Javascript_Bluebird_Botkit - Fatal编程技术网

Javascript 如何处理嵌套承诺的结果

Javascript 如何处理嵌套承诺的结果,javascript,bluebird,botkit,Javascript,Bluebird,Botkit,我在重构一些代码以使用承诺时遇到困难,这是为了避免嵌套回调,我尝试重构的代码如下所示: bot.api.users.list({}, function(err, teamData) { if(err) { bot.botkit.log("Couldn't fetch team data from API", err); return; } var members = teamData.members; var msgSender = _.find(members, function(m

我在重构一些代码以使用承诺时遇到困难,这是为了避免嵌套回调,我尝试重构的代码如下所示:

bot.api.users.list({}, function(err, teamData) {
if(err) {
  bot.botkit.log("Couldn't fetch team data from API", err);
  return;
}

var members = teamData.members;
var msgSender = _.find(members, function(member) { return member.id == message.user });

parsedUserIds(userIdsGroup).forEach(function(id) {
  var msgReceiver = _.find(members, function(member) { return member.id == id });

  bot.startPrivateConversation({ user: id }, function(err, conversation) {
    if(err) {
      bot.botkit.log("Couldn't initiate private conversation", err);
      return;
    }

    var message = format("Hey {to}, {from} just requested a Pull Request Review, here's the link: {githubLink}, please go and check it out!", 
                         { to: msgReceiver.name,
                           from: msgSender.name,
                           githubLink: githubRepoUrl });

      conversation.say(message);
  });
});
  var usersList = Promise.promisify(bot.api.users.list);
  var privateConversation = Promise.promisify(bot.startPrivateConversation);

  usersList({}).then(function(data) {
    var members = data.members;
    var msgSender = findMember(members, message.user);

    return Promise.all(parsedUserIds(userIdsGroup).map(function(id) {
      var msgReceiver = findMember(members, id);

      return privateConversation({ user: id }).then(function(conversation) {
        var message = format("Hey {to}, {from} just requested a Pull Request Review, here's the link: {githubLink}, please go and check it out!", 
                             { to: msgReceiver.name,
                               from: msgSender.name,
                               githubLink: githubRepoUrl });
        conversation.say(message);
      });
    }));
  }).catch(function(err){
    bot.botkit.log(err);
  });
我使用带有SlackAPI的botkit,并使用bluebird作为承诺

代码中最麻烦的部分是循环,循环遍历每个id并开始与用户的私人对话;我一直在尝试的是这样的:

bot.api.users.list({}, function(err, teamData) {
if(err) {
  bot.botkit.log("Couldn't fetch team data from API", err);
  return;
}

var members = teamData.members;
var msgSender = _.find(members, function(member) { return member.id == message.user });

parsedUserIds(userIdsGroup).forEach(function(id) {
  var msgReceiver = _.find(members, function(member) { return member.id == id });

  bot.startPrivateConversation({ user: id }, function(err, conversation) {
    if(err) {
      bot.botkit.log("Couldn't initiate private conversation", err);
      return;
    }

    var message = format("Hey {to}, {from} just requested a Pull Request Review, here's the link: {githubLink}, please go and check it out!", 
                         { to: msgReceiver.name,
                           from: msgSender.name,
                           githubLink: githubRepoUrl });

      conversation.say(message);
  });
});
  var usersList = Promise.promisify(bot.api.users.list);
  var privateConversation = Promise.promisify(bot.startPrivateConversation);

  usersList({}).then(function(data) {
    var members = data.members;
    var msgSender = findMember(members, message.user);

    return Promise.all(parsedUserIds(userIdsGroup).map(function(id) {
      var msgReceiver = findMember(members, id);

      return privateConversation({ user: id }).then(function(conversation) {
        var message = format("Hey {to}, {from} just requested a Pull Request Review, here's the link: {githubLink}, please go and check it out!", 
                             { to: msgReceiver.name,
                               from: msgSender.name,
                               githubLink: githubRepoUrl });
        conversation.say(message);
      });
    }));
  }).catch(function(err){
    bot.botkit.log(err);
  });
据我所知,Promise.all允许我从一系列承诺中获得结果。。。但是,我从以下代码中得到了一个错误:
TypeError:this.task.bot.reply不是一个对我毫无帮助的函数

我怎样才能用承诺来完成我想做的事情

所有这些都能让我从一系列的承诺中得到结果

all返回一个承诺,一旦您在其中传递的所有承诺都实现,该承诺就会实现。 因此,您需要做的是调用
,然后对其调用

Promise.all(parsedUserIds(userIdsGroup).map(function(id) {/*return promise here*/}))
.then(function(results) { console.log(results); })
所有这些都能让我从一系列的承诺中得到结果

all返回一个承诺,一旦您在其中传递的所有承诺都实现,该承诺就会实现。 因此,您需要做的是调用
,然后对其调用

Promise.all(parsedUserIds(userIdsGroup).map(function(id) {/*return promise here*/}))
.then(function(results) { console.log(results); })