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

Parse platform parse.com是一个简单的云计算工作,parse-platform,cloud,Parse Platform,Cloud,我试图在parse.com上创建一个简单的云作业,但它的行为与预期不符 作业返回时没有错误,但在此过程中,我进行了一个查找查询,该查询似乎被抛出到了空中。没有错误,在执行query.find()之前,my console.log是可见的,但在此之后,没有任何内容。。。查询似乎悄悄地失败了 这是我的密码: Parse.Cloud.job("maintenanceJob", function(request, status) { return performMaintenanceTasks

我试图在parse.com上创建一个简单的云作业,但它的行为与预期不符

作业返回时没有错误,但在此过程中,我进行了一个查找查询,该查询似乎被抛出到了空中。没有错误,在执行query.find()之前,my console.log是可见的,但在此之后,没有任何内容。。。查询似乎悄悄地失败了

这是我的密码:

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():

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


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

我不确定这是否与您有关,但根据我个人的经验,我知道解析日志似乎有点不直观。默认情况下,解析日志只显示10行,因此确保每次检查时都指定日志长度

parse log -n 1000

…这是我每次都会做的事。这只会使调试更容易

您将承诺和“旧式”回调与匿名函数混合在一起,我建议只遵守承诺。我在云代码中使用这种编码方式,没有问题,但感谢您的建议。尽管如此,我还是尝试了你所说的,只是为了100%确定;我去掉了函数,将所有承诺都放在了Cloud.job()中。不幸的是,这没有改变任何事情。然而,我将更新我的问题,因为我已经继续我的实验,也许能够更好地指出问题所在。可能是一个错误事实上…是的,我知道,但感谢分享信息!最后,我从
performMaintenanceTasks()
中删除了
count()
查询,我不知道为什么
deleteOldItems()
嵌套在其中时无法正确执行。我认为做一个
count()
请求代价很高,而且我的表超过了100K行,parse没有正确地处理这个问题。。。
parse log -n 1000