计算后台作业中的错误

时间:2014-07-26 18:46:58

标签: parse-platform

我在解析云上实现一个简单(或者我认为)计算后台作业时遇到了麻烦:

我有:

  • 一个有200个国家的国家级。
  • 一个Channel类,目前只有一个对象(用于测试)。

基本上,这个想法是,对于每个国家,可以有几个渠道。 使用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]

有谁知道这个错误意味着什么以及它失败的原因?

感谢您提供给我的所有建议和解答!我好几天都遇到这个问题了!

0 个答案:

没有答案