2015-11-10 139 views
0

我写了一些代码来发送文本消息或推送电话号码数组通知。但是,我在尝试避免出现多次成功/错误错误时遇到了一个问题,以确定在哪里解决承诺。 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 
     }); 
     }; 
    }); 
    }); 
}); 

回答

0

您应该在代码中promisify循环。每个查询都会返回一个承诺,您可以使用.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 
}));