解析 - 从beforeSave上的指针获取对象?

时间:2014-05-14 14:17:47

标签: parse-platform

我有一个我发送给服务器的Offer对象,当即将创建此提议时,我需要向用户发送推送通知。 Offer有一个指向User的指针,该字段被称为" to"。

如何从指针中获取对象?

Parse.Cloud.beforeSave("Request", function(request, response) {

    var userQuery = new Parse.Query("User")

    userQuery.get(request.object.get("to").id, {
        success: function (user) {
            console.log("user: ", user);
            var installationQuery = new Parse.Query("Installation");
            installationQuery.equalTo("user", user);

            Parse.Push.send({
                where : installationQuery,
                data : {
                    alert : "HEllo"
                },
                success : function() {

                },
                error : function() {
                    console.log("error finding installation: " + error);
                }
            });
        },
        error : function (error) {
            console.log("ERRRRRRRRRR");
        }
    });

    response.success();
});

1 个答案:

答案 0 :(得分:5)

要直接回答您的问题,您可以使用Parse.Query.get()Parse.Object.fetch()来检索对象。

我假设你看到的问题是对象保存但推送通知没有发生。原因是你在调用response.success()并返回之前没有等待get()完成。

以下几种方法可以协调:

您的现有代码,但response.success()已向上移动:     Parse.Cloud.beforeSave(“请求”,函数(请求,响应){

    var userQuery = new Parse.Query("User")

    userQuery.get(request.object.get("to").id, {
        success: function (user) {
            console.log("user: ", user);
            var installationQuery = new Parse.Query("Installation");
            installationQuery.equalTo("user", user);

            Parse.Push.send({
                where : installationQuery,
                data : {
                    alert : "HEllo"
                },
                success : function() {
                    response.success();
                },
                error : function() {
                    console.log("error finding installation: " + error);
                }
            });
        },
        error : function (error) {
            console.log("ERRRRRRRRRR");
        }
    });
});

简化为Promises

Parse.Cloud.beforeSave("Request", function(request, response) {
    request.object.get("to").fetch().then(function(user) {
        var installationQuery = new Parse.Query("Installation");
        installationQuery.equalTo("user", user);

        return Parse.Push.send({
            where : installationQuery,
            data : {
                alert : "HEllo"
            }
        });
    }).then(function() {
        response.success();
    }, response.error);
});

进一步简化。如果您没有在用户中使用数据,则不需要仅仅为了传递指向查询的指针而获取它。

Parse.Cloud.beforeSave("Request", function(request, response) {
    var installationQuery = new Parse.Query("Installation");
    installationQuery.equalTo("user", request.object.get("to"));

    return Parse.Push.send({
        where : installationQuery,
        data : {
            alert : "HEllo"
        }
    }).then(function() {
        response.success();
    }, response.error);
});