我在这里按照说明进行操作:

https://parse.com/questions/unique-fields--2

var Profile = Parse.Object.extend("Profile");

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

                       if (!request.object.get("entityID")) {
                            response.error('must have a entity id');
                       } else {

                       var query = new Parse.Query(Profile);
                       query.equalTo("entityID", request.object.get("entityID"));
                       query.first({

                                   success:function(object) {

                                    if (object) {
                                        response.error("already exist");
                                    }
                                    else {
                                        response.success();
                                    }

                                   },
                                   error:function(error) {
                                        response.error("couldnt validate uniqueness for this profile");
                                   }

                        });


                        }
                       });

我有一个配置文件表,唯一键是entityID,插入时,我需要检查是否存在具有相同键的条目。

问题是,我无法再更新条目(似乎插入和更新请求都触发了此云代码。

我该如何修改它

当我插入
  • 时(如果存在),我将其忽略;如果不存在,将其插入。
  • ,当我更新时,如果存在,请更新;如果不存在,我将其忽略。
  • 最佳答案

    我知道这有点陈旧,但是应该指出的是,在Parse实现锁/等待系统或任意约束实现之前,不可能完全防止使用云代码重复条目,因为不能保证只有一个实例代码在任何给定的点运行。即使您有这样的事情:

    if entry exists
        update it or don't add it
    else
        add it
    

    由于没有锁定,因此无法实现自己的约束实现。此外,尝试这样做将使您的API调用加倍,并可能使您陷入更昂贵的计划。即使在最近的几个月中,Parse的工作人员也多次承认这一点(只是在论坛上搜索),并建议在某些情况下使用原子增量或自动生成的唯一对象ID,但是在大多数情况下,这是不切实际的。他们还建议运行自 Action 业以在输入后删除重复项,但这并不能保证即使在作业运行后,系统中的任何给定点在内部也是一致的。

    底线是,如果约束强制执行和整体数据完整性对于您的应用程序至关重要,则Parse尚未成熟到可以满足您的需求。我希望很快能看到这种变化。

    关于javascript - parse.com云代码可防止重复错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22892466/

    10-14 22:31