使用嵌套查询的云工作承诺
Parse.com Cloud job promise with nested query
我在Parse.com上有一个游戏,用户提交意见,其他玩家投票。
我正试图写一个云后台作业来更新我的所有用户的帐户与投票总数,这是从他们的每个提交的投票总数的总和。
我已经尝试了大约5种不同的方法,不能得到嵌套查询运行(更不用说更新和保存)。
这里是文档和一个有用的博客文章…
https://parse.com/docs/js_guide promises-creation
http://blog.parse.com/2013/01/29/whats-so-great-about-javascript-promises/这是我的最新消息,任何帮助都是非常感谢的。
编辑:感谢@axymous让我清楚地看到,我需要显式地创建并立即返回承诺,然后在回调中解决它。
Parse.Cloud.job("calculateUserTotals", function(request, status) {
Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.User);
query.find().then(function(users) {
var promises = [];
_.each(users, function(user) {
promises.push((function(user){
var promise = new Parse.Promise();
console.log(user.toJSON().objectId); // user objectId is correct here
var submissionQuery = new Parse.Query('submission');
submissionQuery.equalTo('user', user.toJSON().objectId);
submissionQuery.find({ // this doesnt seem to ever run, i have tried .each as well
success: function(submissions) {
var votes = 0;
for (var i=0; i<submissions.length; i++) {
var submission = submissions[i];
votes = votes + submission.get('votes').length;
}
user.set('submission_count', submissions.length);
user.set('vote_count', votes);
user.save({
success: function(user) {
promise.resolve();
}
});
},
error: function(error) {
status.error(error);
}
});
return promise;
})(user));
});
return Parse.Promise.when(promises);
})
.then(function() {
status.success('leaderboard updated.');
});
});
我需要显式地创建并立即返回承诺,然后在回调中解析它。谢谢@axymous。
Parse.Cloud.job("calculateUserTotals", function(request, status) {
Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.User);
query.find().then(function(users) {
var promises = [];
_.each(users, function(user) {
promises.push((function(user){
var promise = new Parse.Promise();
console.log(user.toJSON().objectId); // user objectId is correct here
var submissionQuery = new Parse.Query('submission');
submissionQuery.equalTo('user', user.toJSON().objectId);
submissionQuery.find({ // this doesnt seem to ever run, i have tried .each as well
success: function(submissions) {
var votes = 0;
for (var i=0; i<submissions.length; i++) {
var submission = submissions[i];
votes = votes + submission.get('votes').length;
}
user.set('submission_count', submissions.length);
user.set('vote_count', votes);
user.save({
success: function(user) {
promise.resolve();
}
});
},
error: function(error) {
status.error(error);
}
});
return promise;
})(user));
});
return Parse.Promise.when(promises);
})
.then(function() {
status.success('leaderboard updated.');
});
});
相关文章:
- 承诺工作不正常
- 将异步工作流更改为承诺(蓝鸟)
- 承诺内部工作
- 在节点中,使用Q,使两个函数并行工作,但只等待第一个函数实现其承诺
- 承诺链不;没有按预期工作
- 无法获得蓝鸟承诺和猫鼬的 save() 在 node.js 中工作
- 回调/承诺无法正常工作
- 嵌套的 AJAX 调用列表和 $.when.apply - 延迟承诺无法正常工作
- 无法获得$q.所有工作都致力于多个承诺
- ngInit 不异步工作($q承诺)
- 为什么我的承诺不能在角度js中工作
- 我的承诺是否按预期工作
- jQuery推迟并承诺不能正常工作
- Node.js承诺q不能按预期工作
- “捕获”如何在原生承诺链中工作
- Nodejs承诺不会正常工作
- BluebirdJS承诺与jQuery不能正常工作
- 递延和承诺函数不能正常工作
- 解析,云,工作承诺不起作用
- 使用嵌套查询的云工作承诺