解析云 - 删除属性(指针)

时间:2015-11-02 10:36:02

标签: javascript parse-platform

我的数据模型由3个对象组成,其中两个(子项)使用指针链接到父项。

MyModel是具有2个属性的父级:颜色和目标。两者都是指向其他对象的指针。

当我删除父母时我也希望删除子项,但需要注意的是指针可能是零,所以在尝试删除之前我需要检查是否有某些内容。

[我是Javascript的新手所以也许这也是问题的一部分]

Parse.Cloud.beforeDelete("MyModel", function(request) {
    if request.has(request.object.colors) {
      color = request.object.colors;
      Parse.Object.destroyAll(color, {
              success: function() {},
              error: function(error) {
                console.error("Error deleting related color " + error.code + ": " + error.message);
              }
            });
    }

    if request.has(request.object.goal) {
      goal = request.object.goal;
      Parse.Object.destroyAll(goal, {
          success: function() {},
          error: function(error) {
            console.error("Error deleting related goal " + error.code + ": " + error.message);
          }
        });
  }
});

1 个答案:

答案 0 :(得分:1)

让我们把它分解成更小的函数,并在整个过程中纠正OP代码中的几个问题。将事物简化为更小的,承诺返回的函数非常有帮助,保持代码模块化和并发性可管理。

修改 通常,最好使用指针来关联对象。这是一个删除与指针相关的对象的通用函数:

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

一些作者通过包含相关对象id的字符串列来关联对象。这是删除id:

相关对象的等效函数
function deleteRelatedId(myModel, columnName, relatedClass) {
    var relatedId = myModel.get(columnName);
    if (relatedId) {
        var query = new Parse.Query(relatedClass);
        return query.get(relatedId).then(function(relatedObject) {
            return relatedObject.destroy();
        });
    } else {
        return null;
    }
}

现在,beforeDelete方法易于编写和理解。 (假设通过指针建立关系):

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

另一个需要注意的重要事项是,before钩子需要一个响应对象,并且在相关任务完成后需要在该对象上调用成功/错误。

所有这一切都取决于承诺,这​​是必要且极其有用的。 Read about parse's implementation of them here