【发布时间】:2014-09-21 21:44:00
【问题描述】:
我有一个在 parse.com 上运行的 javascript 脚本,它向用户发送推送通知。我的脚本几乎完成了。现在它会发送一个带有查询集的推送到我拥有它的地方。所以这是我现在对它的限制。
testItemsQuery.equalTo('school', 'Union College (NY)');
testItemsQuery.equalTo('meal','LUNCH');
但现在我有 2 个变量
var schoolArray = ['Union College (NY)', 'University of Albany'];
var mealArray = ['LUNCH','DINNER'];
我也希望它在这个脚本中循环 4 次。我首先希望它循环播放两所学校,然后循环播放每顿饭。所以最基本的代码版本应该是这样的。
var schoolArray = ['Union College (NY)', 'University of Albany'];
var mealArray = ['LUNCH','DINNER'];
for (var i = 0; i < schoolArray.length; i++) {
for (var j = 0; j < mealArray.length; j++) {
//insert all my other code here
}
}
这是我的脚本,它向 parse.com 发出异步请求,这就是为什么 for 循环不起作用的原因,因为我认为我需要使用一些承诺。这是我在 for 循环中想要的代码:
function SendPush(installationId, msg) {
var query = new Parse.Query(Parse.Installation);
query.equalTo('objectId', installationId);
Parse.Push.send({
where: query,
data: {alert: msg}
});
}
var schoolArray = ['Union College (NY)', 'University of Albany'];
var mealArray = ['LUNCH','DINNER'];
var TestItem = Parse.Object.extend("TestItem");
var UserFavorites = Parse.Object.extend("UserFavourite");
var testItemsQuery = new Parse.Query(TestItem);
testItemsQuery.equalTo('school', 'Union College (NY)'); //I want to loop through both schools for both meals
testItemsQuery.equalTo('meal','LUNCH');
var groupedAlerts = {};
testItemsQuery.each(function(testItem) {
var item = testItem.get('item');
var school = testItem.get('school');
var userFavoritesQuery = new Parse.Query(UserFavorites);
userFavoritesQuery.include('user');
userFavoritesQuery.equalTo('item', item);
userFavoritesQuery.equalTo('school', school);
return userFavoritesQuery.each(function(userFavorite) {
//console.log(userFavorite);
var user = userFavorite.get('user');
if(user){
var instId = user.get('installation').id;
//console.log(instId);
if(!groupedAlerts[instId]) {
groupedAlerts[instId] = [];
}
var meal = testItem.get('meal').toLowerCase();
var m = userFavorite.get('item') + " is being served for " + meal + " at " + testItem.get('schoolMenu');
groupedAlerts[instId].push(m);
}
});
}).then(function () {
var alerts = [];
for(var key in groupedAlerts) {
alerts.push({
installationId: key,
alerts: groupedAlerts[key],
});
// Send push notifications
SendPush(key, groupedAlerts[key].join());
}
});
提前感谢您的帮助!!!!
【问题讨论】:
-
如果您只是将代码放入循环中,什么不起作用?您希望异步步骤按顺序运行还是并行运行?
标签: javascript for-loop parse-platform promise