删除云代码中的指针属性

Delete pointer property in cloud code

从 class "MyModel" 中删除对象后,下面的代码试图通过指针属性删除与其相关的两个对象,一个称为 "colors" ,另一个称为 "goal"。这些对象存在于数据中,但日志显示 "object not found" 错误。

代码来自

云代码:

function deleteMyModelPointer(myModel, pointerName, pointerClass) {
        var pointer = myModel.get(pointerName);
        if (pointer) {
            var query = new Parse.Query(pointerClass);
            return query.get(pointer).then(function(relatedObject) {
                return relatedObject.destroy();
            });
        } else {
            return null;
        }
    }

    Parse.Cloud.beforeDelete("MyModel", function(request, response) {
        var myModel = request.object;
        deleteMyModelPointer(myModel, "colors", "ColorModel").then(function() {
            return deleteMyModelPointer(myModel , "goal", "Goal");
        }).then(function() {
            response.success();
        }, function(error) {
            response.error(error);
        });
    });

日志:

v14 before_delete triggered for MyModel for user wMgAGMOPNK: Input: {"object":{"ACL":{"wMgAGMOPNK":{"read":true,"write":true}},"colors":{"__type":"Pointer","className":"ColorModel","objectId":"Z3gEplJ0tq"},"counter":1,"createdAt":"2015-12-10T14:06:19.630Z","createdAtLocally":{"__type":"Date","iso":"2015-12-10T14:06:18.825Z"},"deletedLocally":false,"goal":{"__type":"Pointer","className":"Goal","objectId":"BkruZqhyJ7"},"lastModifiedAt":{"__type":"Date","iso":"2015-12-10T14:06:24.270Z"},"objectId":"LuobH2P8iz","resetValue":0,"stepBy":1,"title":"Ggggggg","updatedAt":"2015-12-10T14:06:24.670Z","user":{"__type":"Pointer","className":"_User","objectId":"wMgAGMOPNK"}}} Result: {"code":101,"message":"Object not found."}

但是来自对象浏览器和客户端的两个指针仍然存在。正如我所说,ACL 设置为所有 3 个对象的登录 PFUser(具有读、写权限)。

问题是 OP 代码是为 objectId 属性 编写的,而不是指针。有了 objectId,正确的操作是 query.get() 来获取相关对象,但是对于指针,只需要 fetch 指针(不需要知道它的 class).

function deleteMyModelPointer(myModel, pointerName) {
    var pointer = myModel.get(pointerName);
    if (pointer) {
        return pointer.fetch().then(function(relatedObject) {
            return relatedObject.destroy();
        });
    } else {
        return null;
    }
}

调用方可以保持不变,只是去掉第三个参数。