2015-11-10 140 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 
}));