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