解析云代码保存关系

时间:2015-04-18 19:54:23

标签: javascript parse-platform cloud-code

我正在开发一个使用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的新手,我几个小时都无法完成这项工作。非常感谢您的帮助。

1 个答案:

答案 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()将保存一个对象数组,这是有用的,因为你有两个。