尝试使用Promises删除记录

时间:2015-03-22 06:21:46

标签: javascript parse-platform promise cloud-code

这是一个我希望在Parse.com上使用Cloud Code完成的简单任务。 任务包括删除一个单位以及与之相关的单位。

一个单位有几个与之相关的句子,每个句子都有一个或多个翻译。 因此,当执行任务时,应删除单元以及句子和翻译。

我有一种强烈的感觉,我应该使用Promise(并将它们链接起来),以便以良好的方式做我想做的事。

下面是我编写的代码,但它只能部分工作(翻译被删除,而不是其余的。)

Parse.Cloud.define("deleteUnitAndDependencies", function(request, response) {
    var unitListQuery = new Parse.Query("UnitList");
    unitListQuery.equalTo("objectId", request.params.unitID);
    unitListQuery.equalTo("ownerID", request.params.userID);
    unitListQuery.find().then(function(resUnit) {
        var sentenceListQuery = new Parse.Query("SentenceList");
        sentenceListQuery.equalTo("unit", resUnit[0]);
        return sentenceListQuery.find();
    }).then(function(resSentence) {
        var translatListQuery = new Parse.Query("TranslatList");
        for (i = 0; i < resSentence.length; i++) {
            var query = new Parse.Query("TranslatList");
            query.equalTo("sentence", resSentence[i]);
            translatListQuery = Parse.Query.or(translatListQuery, query);
        }
        return translatListQuery.find();
    }).then(function(resTranslat) {
        for (iT = 0; iT < resTranslat.length; iT++) {
            resTranslat[iT].destroy({});
        }
    });
});

我当然需要添加一些代码,如:

  resSentence[x].destroy({});

  resUnit[0].destroy({});

问题是我不太清楚那里的适当位置。

2 个答案:

答案 0 :(得分:1)

收集要删除的对象,然后使用Parse.Object.destroyAll(someArray);一次删除所有内容。

答案 1 :(得分:1)

在这种情况下,我喜欢使用范围变量来保存以供日后使用。

var scope = {
  sentences: [],
  units: []
};

// later inside then block...
  scope.sentences.push(resSentence[i]);

// ...now we have them collected safely
.then(function() {
  return Parse.Object.destroyAll(scope.sentences);
})