解决迭代的承诺

时间:2015-11-10 04:54:39

标签: parse-platform cloud-code es6-promise

我写了一些代码,用于在电话号码数组上发送短信或推送通知。但是,我在解决承诺的问题时遇到了问题,同时试图避免多次成功/错误错误。 GuestDigits是一系列电话号码。任何想法或意见将不胜感激。

  Parse.Cloud.define('sendOutNotifications', function(request, response) {

  var owner = request.user;
  var ownerNumber = owner.get('phoneNumber');
  var guestlistId = request.params.guestlistId;
  var guestDigits = request.params.guestDigits;
  var eventName = request.params.eventName;
  var promotionTime = request.params.promotionTime;
  var firstName = owner.get('firstName');

  guestDigits.forEach(function(guestDigit) {

    var queryUser = new Parse.Query(Parse.User);
    queryUser.equalTo('phoneNumber', guestDigit);

    queryUser.find().then(function(result) {

      if (result.length > 0) {
        Parse.Cloud.run('sendPushNotification', {
          user: JSON.stringify(result[0]),
          firstName: firstName,
          eventName: eventName,
          promotionTime: promotionTime
        });
      } else {
        Parse.Cloud.run('sendTextMessage', {
          firstName: firstName,
          phoneNumber: guestDigit
        });
      };
    });
  });
});

1 个答案:

答案 0 :(得分:0)

您应该在代码中宣传循环。每个查询都会返回一个承诺,您可以使用.then()块来链接。你将所有这些承诺添加到一个数组中,在你完成循环后,等待所有这些承诺得到满足。

Parse.Promise.as().then(function() {
    var promises = [];    

    guestDigits.forEach(function(guestDigit) {

        var queryUser = new Parse.Query(Parse.User);
        queryUser.equalTo('phoneNumber', guestDigit);

        promises.push(queryUser.find().then(function(result) {

            if (result.length > 0) {
                return Parse.Cloud.run('sendPushNotification', {
                       user: JSON.stringify(result[0]),
                       firstName: firstName,
                       eventName: eventName,
                       promotionTime: promotionTime });
            } else {
                return Parse.Cloud.run('sendTextMessage', {
                       firstName: firstName,
                       phoneNumber: guestDigit });
            }
       }));
   });

   // wait for all the promises to be fulfilled
   return Parse.Promise.when(promises);

}).then(function() {
        // success
    }, function (error) {
        // error
}));