我写了一些代码,用于在电话号码数组上发送短信或推送通知。但是,我在解决承诺的问题时遇到了问题,同时试图避免多次成功/错误错误。 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 :(得分: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
}));