我正在尝试在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()!
这是什么意思?我不允许在同一个类上嵌套查询吗?
答案 0 :(得分:0)
我不确定这是否属于你,但我从个人经验中知道,Parse日志看起来有点不直观。 Parse日志默认只吐出10行,因此请确保每次检查时都指定日志长度。
parse log -n 1000
...是我每次都倾向于做的事情。这只会使调试更容易。