【问题标题】:Parse beforeSave() cloud code function not working解析 beforeSave() 云代码功能不起作用
【发布时间】:2015-01-26 22:58:54
【问题描述】:

我添加了一个 beforeSave() Parse 云函数定义,但无法正常工作。

这是背景: 我有一个名为 UserRewards 的类,它有一个名为 user 的列,类型为 ParseRelation。它恰好由 1 个关系组成,该关系具有一个 ParseUser 类型的对象。我想在此函数中设置一个新列 pUser。它查找 user 关系,在其中找到 ParseUser,并将 pUser 设置为该用户。

这是我的代码

Parse.Cloud.beforeSave("UserRewards", function(request, response) {
    var relation = request.object.relation("user");
    relation.query().find({
            success: function(list) {
                console.log("looked up relation");
                if (list.length > 0) {
                    var pUser = list[0];
                    request.object.set("pUser", pUser);
                    console.log("updated pUser");
                }
            },
                error: function(error) {
                console.error("unable to lookup relation");
            }
    });
    response.success();

});

当我更新 UserRewards 行时,将调用此函数。但它什么也没做 - 没有任何控制台或错误日志。

有什么想法吗?

【问题讨论】:

    标签: javascript parse-platform parse-cloud-code


    【解决方案1】:

    您的函数在查询完成之前运行 response.success(),从而取消它。试试……

    Parse.Cloud.beforeSave("UserRewards", function(request, response) {
        var relation = request.object.relation("user");
        relation.query().find({
                success: function(list) {
                    console.log("looked up relation");
                    if (list.length > 0) {
                        var pUser = list[0];
                        request.object.set("pUser", pUser);
                        console.log("updated pUser");
                    }
                    response.success();
                },
                    error: function(error) {
                    console.error("unable to lookup relation");
                    response.error(error);
                }
        });
    });
    

    或者,使用 promises 更容易查看...

    Parse.Cloud.beforeSave("UserRewards", function(request, response) {
        var relation = request.object.relation("user");
        relation.query().find().then(function(list) {
            console.log("looked up relation");
            if (list.length > 0) {
                var pUser = list[0];
                request.object.set("pUser", pUser);
                console.log("updated pUser");
            }
            response.success();
        }, function(error) {
            console.error("unable to lookup relation");
            response.error(error);
        });
    });
    

    编辑我想我理解后续问题是要求将指针属性与关系属性同步,假设在保存之前只设置了其中一个。这可以通过检测关系为空来完成。如果是,请再执行一个异步步骤来获取指针...

    Parse.Cloud.beforeSave("UserRewards", function(request, response) {
        var relation = request.object.relation("user");
        relation.query().find().then(function(list) {
            console.log("looked up relation");
            if (list.length > 0) {
                var pUser = list[0];
                request.object.set("pUser", pUser);
                console.log("updated pUser");
                return Parse.Promise.as();  // we're done, this will pass nothing to the next step
            } else {  // the relation is empty, so the user pointer must be set
                var pointer = request.object.get("pUser");
                return pointer.fetch();    // this will pass the pUser to the next step
            }
        }).then(function(pUser) {
            if (pUser) {
                // must have found an empty relation in the last step.  add the user pointer to it
                request.object.relation.add(pUser);
            }
            response.success();
        }, function(error) {
            console.error("unable to lookup relation");
            response.error(error);
        });
    });
    

    (注意代码未经测试)。

    【讨论】:

    • 您好,谢谢您的回答。那成功了。我有一个后续问题。如果我想检查是否设置了关系,如果没有设置则设置指针怎么办。如果未设置但设置了指针,则设置关系?随意修改上面的答案。承诺是好的。
    • @amit - 尽我所能。
    • 在第二步中,我认为它需要检查 if (pointer).. add(pointer)
    • 我不记得关系是否未初始化,无论您收到的是未定义的查询还是回答为空的查询。在第二个块中,参数是指针的获取结果,可以直接设置到关系中。
    • 关系已初始化(如果您检查 if(relation) 它通过),但如果您在此空关系上调用 query(),Parse 云代码会崩溃,而不会调用错误处理程序。我认为它是 Parse 中的一个错误。
    猜你喜欢
    • 2016-03-23
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多