parse.com一个简单的云计算工作

时间:2014-08-05 10:43:41

标签: parse-platform cloud

我正在尝试在parse.com上创建一个简单的Cloud Job,但它并没有按预期运行。

作业没有错误地返回,但是在这个过程中我正在进行一个似乎被抛出到虚空的查找查询。没有错误,我的console.log在执行query.find()之前是可见的,但之后没有...查询似乎无声地失败。

这是我的代码:

Parse.Cloud.job("maintenanceJob", function(request, status) {

    return performMaintenanceTasks().then(function() { 
       status.success("Parse Job done");
    }, function(errors) {
        status.error(tools.prettifyError(errors));
    });

});


function performMaintenanceTasks ()
{
    // If we have more than NB_MAX_ITEMS objects in Items, let's delete some
    var query = new Parse.Query(Items);
    return query.count({
      success: function(count) {
        if(count > NB_MAX_ITEMS) {
            return deleteOldItems(1); // 1 is used for test
        } 
        return Parse.Promise.as("Nothing to do.");
      },
      error: function(error) {
        return Parse.Promise.error(error);
      }
    });

}

function deleteOldItems(nbToDelete) {

    // (...)

    var query = new Parse.Query(Items);
    query.ascending("createdAt");
    query.limit(nbToDelete);
    query.include("rawData");

    console.log("I am visible in console, but NOTHING AFTER ME. query.find() seems to return immediately"); 

    return query.find({
        success: function (results) {
            // I never pass here
            var promise = Parse.Promise.as();

            _.each(results, function (item) {

                // For each item, extend the promise with a function to delete it.
                promise = promise.then(function () {

                    var rawData = item.get("rawData");

                    // If we have a rawData, delete it before Item
                    if (rawData && rawData.id) {

                        return rawData.destroy({
                            success: function (theObj) {
                                return item.destroy({
                                    success: function (anotherObj) {
                                        // I never pass here
                                        return Parse.Promise.as();
                                    },
                                    error: function (anotherObj, error) {
                                        // I never pass here
                                        return Parse.Promise.as();
                                    }
                                });
                            },
                            error: function (theObj, error) {
                                // I never pass here
                                return Parse.Promise.as();
                            }
                        });

                    } else {
                        return item.destroy({
                            success: function (anotherObj) {
                                // I never pass here
                                return Parse.Promise.as();
                            },
                            error: function (anotherObj, error) {
                                // I never pass here
                                return Parse.Promise.as();
                            }
                        });
                    }
                });
            });

            return promise;
        },
        error: function (error) {
            // I never pass here
            return Parse.Promise.error(error);
        }
    }).then(function (nil) {
        // I never pass here
        return Parse.Promise.as("DELETEOLDITEMS: Job finished");
    }, function(error) {
        // I never pass here
        return Parse.Promise.error(error);
    });
}

(我已经测试过替换每个//我从来没有通过console.log()传递,没有任何结果)

我尝试了很多不同的东西,但我相信这应该有效!或者至少返回错误!

任何人都知道我做错了什么?提前谢谢!

修改

即使更奇怪,如果我修改performMaintenanceTasks以跳过query.count():

function performMaintenanceTasks()
{
    return deleteOldItems(1);
}

这次正确执行了deleteOldItems()中的query.find()!

这是什么意思?我不允许在同一个类上嵌套查询吗?

1 个答案:

答案 0 :(得分:0)

我不确定这是否属于你,但我从个人经验中知道,Parse日志看起来有点不直观。 Parse日志默认只吐出10行,因此请确保每次检查时都指定日志长度。

parse log -n 1000

...是我每次都倾向于做的事情。这只会使调试更容易。