Parse platform 解析后台作业each()不会遍历所有记录吗?
我编写了一个云作业,在用户对象中插入用户名字和姓氏的小写版本,以便我可以从我的客户端应用程序执行搜索 当我在一个拥有40个用户的dev parse应用程序上运行这项工作时,效果非常好 当我在我的生产应用程序上运行这个时,它并没有更新我的所有记录。目前我有数千名用户,我希望这项云工作能够照顾到所有用户,如下所述: “新的Parse.Query对象上的each方法允许您这样做。即使一个集合中有上万个或更多的对象,它也会返回其中的每一个对象,让您有机会根据需要修改它们。” 那么我的问题是为什么这个函数会留下超过一半的数据库?它只对一群用户起作用,也许几百个 如何使此函数影响用户表中的整个数据集Parse platform 解析后台作业each()不会遍历所有记录吗?,parse-platform,Parse Platform,我编写了一个云作业,在用户对象中插入用户名字和姓氏的小写版本,以便我可以从我的客户端应用程序执行搜索 当我在一个拥有40个用户的dev parse应用程序上运行这项工作时,效果非常好 当我在我的生产应用程序上运行这个时,它并没有更新我的所有记录。目前我有数千名用户,我希望这项云工作能够照顾到所有用户,如下所述: “新的Parse.Query对象上的each方法允许您这样做。即使一个集合中有上万个或更多的对象,它也会返回其中的每一个对象,让您有机会根据需要修改它们。” 那么我的问题是为什么这个函
Parse.Cloud.job("migration1", function(request, status) {
// Set up to modify user data
Parse.Cloud.useMasterKey();
// Query for all users
var query = new Parse.Query(Parse.User);
query.each(function(user) {
// Set and save the change
var firstname = user.get("firstname");
if(firstname) {
user.set("searchfirstname", firstname.toLowerCase());
} else {
user.set("searchfirstname", "");
}
var lastname = user.get("lastname");
if(lastname) {
user.set("searchlastname", lastname.toLowerCase());
} else {
user.set("searchlastname", "");
}
return user.save();
}).then(function() {
// Set the job's success status
status.success("search migration completed successfully.");
}, function(error) {
// Set the job's error status
status.error("Uh oh, something went wrong with search migration");
});
});
编辑:
好的,当我查看错误日志时,我看到:
E2014-10-18T15:48:49.984Z] v63: Ran job searchMigration with:
Input: {}
Failed with: TypeError: Cannot call method 'toLowerCase' of undefined
我试着用我能想到的任何方式检查未定义,但我仍然遇到同样的问题。
我试图检查未定义的是:
if(lastname === undefined || lastname === void 0 || typeof lastname == 'undefined') ...
我仍然得到未定义错误的toLowerCase,我认为这就是为什么作业停止后不会影响我的所有用户表
有什么建议吗?所以,我终于明白了为什么这项工作没有通过所有的记录,但在“随机”完成一些记录后就会停止 我为用户设置了一个AfterSave钩子,它在上述作业的每次迭代中都会被触发。。。 在这种情况下,保存后,它有时会生成错误并使作业失败 因此,出于某种原因,我认为在作业内部对用户进行保存不会触发after save钩子 就这样。现在一切都好了