解析云代码——修改所有 PFUsers
Parse cloud code - modifying all PFUsers
我正在尝试创建一个云作业,它采用用户全名或用户名并将其以小写形式保存在另一列中。这是我目前所拥有的:
Parse.Cloud.job('normaliseUsername',function(request, status) {
Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.User);
query.find({
success: function(items){
for (var i=0;i<items.length;i++) {
var user = items[i];
console.log(user);
var changed = user["nameChanged"];
if (changed === true) {
var username = user.username;
user.set("lowerCaseName",username.toLowerCase());
} else {
var realName = user["firstName"] + " " + user["lastName"];
user.set("lowerCaseName",realName.toLowerCase());
}
user.save();
}
}
});
});
这会生成一个新列 lowerCaseName
,其中包含 undefined
。
在此实例中如何访问 PFUser 的属性?我试过使用 user.get('');
但它说 Cannot call method 'get' of undefined
这样做:
Parse.Cloud.job("normaliseUsername", function(request, status) {
Parse.Cloud.useMasterKey();
var count_user = 0;
var query = new Parse.Query(Parse.User);
query.descending('updatedAt');
query.Exist('nameChanged');
query.limit(1000);
return query.find().then(function(users) {
return Parse.Promise.when(users.map(function(user) {
count_user+= 1;
if (user.get("nameChanged")) {
user.set("canonical_firstname", user.get("username").toLowerCase());
} else {
var realName = user.get("firstname") + ' ' + user.get("lastname");
user.set("lowerCaseName", realName.toLowerCase());
}
return user.save();
}));
}).then(function() {
status.success("normaliseUsername with " + count_user + " user(s) updated.");
}, function(error) {
status.error("Uh oh, something went wrong.");
});
});
您使用 for
的循环将永远无法工作,您需要使用 Promise
。更多信息:http://blog.parse.com/learn/engineering/whats-so-great-about-javascript-promises/
上述脚本的工作方式,您将在 Parallel
中使用 Promise,而不是在 Series 中:https://parse.com/docs/js/guide#promises
我正在尝试创建一个云作业,它采用用户全名或用户名并将其以小写形式保存在另一列中。这是我目前所拥有的:
Parse.Cloud.job('normaliseUsername',function(request, status) {
Parse.Cloud.useMasterKey();
var query = new Parse.Query(Parse.User);
query.find({
success: function(items){
for (var i=0;i<items.length;i++) {
var user = items[i];
console.log(user);
var changed = user["nameChanged"];
if (changed === true) {
var username = user.username;
user.set("lowerCaseName",username.toLowerCase());
} else {
var realName = user["firstName"] + " " + user["lastName"];
user.set("lowerCaseName",realName.toLowerCase());
}
user.save();
}
}
});
});
这会生成一个新列 lowerCaseName
,其中包含 undefined
。
在此实例中如何访问 PFUser 的属性?我试过使用 user.get('');
但它说 Cannot call method 'get' of undefined
这样做:
Parse.Cloud.job("normaliseUsername", function(request, status) {
Parse.Cloud.useMasterKey();
var count_user = 0;
var query = new Parse.Query(Parse.User);
query.descending('updatedAt');
query.Exist('nameChanged');
query.limit(1000);
return query.find().then(function(users) {
return Parse.Promise.when(users.map(function(user) {
count_user+= 1;
if (user.get("nameChanged")) {
user.set("canonical_firstname", user.get("username").toLowerCase());
} else {
var realName = user.get("firstname") + ' ' + user.get("lastname");
user.set("lowerCaseName", realName.toLowerCase());
}
return user.save();
}));
}).then(function() {
status.success("normaliseUsername with " + count_user + " user(s) updated.");
}, function(error) {
status.error("Uh oh, something went wrong.");
});
});
您使用 for
的循环将永远无法工作,您需要使用 Promise
。更多信息:http://blog.parse.com/learn/engineering/whats-so-great-about-javascript-promises/
上述脚本的工作方式,您将在 Parallel
中使用 Promise,而不是在 Series 中:https://parse.com/docs/js/guide#promises