这是一个我希望在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({});
问题是我不太清楚那里的适当位置。
答案 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);
})