我在解析云上实现一个简单(或者我认为)计算后台作业时遇到了麻烦:
我有:
基本上,这个想法是,对于每个国家,可以有几个渠道。 使用Parse Relation来链接这两个类似乎有些过分,所以我只需要一个名为" country"的字符串字段。在Channel类和一个名为" name"的字符串字段中在国家课程中。
我现在要做的是使用后台工作计算与每个国家/地区相关联的渠道。曾经的国家有一个名为" nbrChannels"这应该等于相应的"国家"领域。但是我得到了一些奇怪的结果:
我认为代码最终会起作用(经过多次不同的尝试):
Parse.Cloud.job("channelsPerCountry", function(request, status) {
Parse.Cloud.useMasterKey();
var countryQuery = new Parse.Query("Country");
countryQuery.each(function(country) {
var countryName = country.get("name");
var n = -1;
var channel = Parse.Object.extend("Channel");
var channelQuery = new Parse.Query(channel);
channelQuery.equalTo("country", countryName);
channelQuery.count({
success: function(number){
n = number;
country.set("nbrChannels",n);
return country.save();
},
error: function(error){
}
});
}).then(function() {
status.success("Channels per country successfully counted.");
}, function(error) {
status.error("Oops, something went wrong!");
});
});
当我在Parse.com上运行这份工作时,工作状态是"成功"并且日志没有什么特别的。
但在数据浏览器中并非所有国家/地区都已更新:
对于他们中的大多数人来说,nbrChannels = 0但是对于其中大约30个,它们看似完全随机,nbrChannels = -1 (意思是计数,或country.save()没有'成功)和他们" updatedAt"字段显示它们尚未更新。
有没有人知道发生了什么?我真的不明白这是怎么可能的......
当我搜索答案时,我遇到了另一种在作业中实现query.count的方式,所以我尝试了这个:
Parse.Cloud.job("channelsPerCountry2", function(request, status) {
Parse.Cloud.useMasterKey();
var countryQuery = new Parse.Query("Country");
countryQuery.each(function(country) {
var countryName = country.get("name");
//var channelQuery = new Parse.Query("Channel");
var channel = Parse.Object.extend("Channel");
var channelQuery = new Parse.Query(channel);
channelQuery.equalTo("country", countryName);
return channelQuery.count().then(function(number){
country.set("nbrChannels",number);
country.save();
}, function(error){
console.error("error counting:" + error);
});
}).then(function() {
status.success("Channels per country successfully counted.");
}, function(error) {
status.error("Oops, something went wrong!");
});
});
这会产生更糟糕的结果:日志显示:
Failed with: Oops, something went wrong!
I2014-07-26T18:19:36.606Z] error counting:[object Object]
有谁知道这个错误意味着什么以及它失败的原因?
感谢您提供给我的所有建议和解答!我好几天都遇到这个问题了!