我正在开发一个使用Parse作为后端的朋友关系的应用程序。当Alice向Bob发送朋友请求时,她生成类型70的通知,其中她自己为userA,Bob为userB。为方便起见,通知还将nameA和nameB作为字符串。
我正在尝试在Cloud Code上实现AfterSave功能。此功能应将Bob添加到Alice的潜在朋友列表"和爱丽丝到鲍勃的潜在朋友名单。出于某些原因,我只能将Bob添加到Alice的列表中,而不是另一个。
这是我的代码:
Parse.Cloud.afterSave("Notification", function(request, response) {
var namnamA = request.object.get('nameA');
var namnamB = request.object.get('nameB');
var tytype = request.object.get('type');
var alice = Parse.User.current();
if (tytype === 70) {
var bobQuery = new Parse.Query("User");
bobQuery.equalTo("username", namnamB);
bobQuery.limit(1);
bobQuery.find().then(function(bobs){
bobs.forEach(function(bobby) {
var bobbysRelation = bobby.relation("potFriendsList");
var alicesRelation = alice.relation("potFriendsList");
alicesRelation.add(bobby);
alice.save().then(function(obj){
console.log("alice has a new potential friend" + obj);
bobbysRelation.add(alice);
bobby.save().then(function(obj){
console.log("bobby has a new potential friend" + obj);
},
function(obj, error){
console.log(error);
});
},
function(obj, error){
console.log(error);
});
});
});
}
});
我是JS的新手,我几个小时都无法完成这项工作。非常感谢您的帮助。
答案 0 :(得分:1)
稍微清理了一下代码,并添加了success()/ error()响应,我相信这就是它无法正常工作的原因。
Parse.Cloud.afterSave("Notification", function(request, response) {
var tytype = request.object.get('type');
if (tytype !== 70) return response.success();
var alice = Parse.User.current();
var alicesRelation = alice.relation("potFriendsList");
// EDIT - query user this way...
var bobQuery = new Parse.Query(Parse.User);
bobQuery.equalTo("username", request.object.get('nameB'));
bobQuery.first().then(function(bob) {
var bobsRelation = bob.relation("potFriendsList");
alicesRelation.add(bob);
bobsRelation.add(alice);
return Parse.Object.saveAll([alice, bob]);
}).then(function() {
console.log("success " + arguments);
response.success(arguments);
}, function(error) {
console.log("error " + error.message);
response.error(error);
});
});
其他一些注释:(0)立即免除非tytype==70
个案例,(1)query.first()
将获得第一个结果,因此不需要limit(1)
和iterate,(2)Parse.Object.saveAll()
将保存一个对象数组,这是有用的,因为你有两个。