parse.com destroyAll 不工作

parse.com destroyAll not working

在此描述之后的代码中,我试图查找并删除所有这些没有组对象集的错误 ListConfig 对象。它正确地找到了它们,但它并没有删除它们。以下代码中是否缺少某些内容?

var Groups = [];

function queryForGroups(callback) {
    var Group = Parse.Object.extend("Group");
    var query = new Parse.Query(Group);
    query.limit(1000);

    query.find().then(function(result) {
        Groups = result;
        callback();
    });
};

function removeConfigs(){
    var Config = Parse.Object.extend("ListConfig");
    var query = new Parse.Query(Config);
        query.limit(10000);
    query.notContainedIn("group", Groups);
    query.find().then(function(configs){
        return Parse.Object.destroyAll(configs, {useMasterKey:true});
    });
}

function removeBadConfigs() {
    queryForGroups(function() {
        removeConfigs();
    });
};

removeBadConfigs();

关于混合承诺、回调和不必要的全局,代码可能会更简洁一些。除此之外,只要您的数据模型支持它,它看起来就应该可以工作。具体来说,您的 ListConfig 对象必须具有 "group" 属性,并且必须为 属性 设置 Parse.Object 值。我见过的最常见的错误是这样的:

var myGroup = // a parse object of type Group
myListConfig.set("group", myGroup.id);  // WRONG
myListConfig.set("group", myGroup);     // RIGHT

假设你做对了,那么为什么你没有看到一些删除就很奇怪了,但这是用承诺清理的代码...

function queryForGroups() {
    let query = new Parse.Query("Group")
    query.limit(1000);
    return query.find();
};

function removeConfigsWithGroups(groups){
    let query = new Parse.Query("Config");
    query.notContainedIn("group", groups);
    return query.find().then(function(configs){
        return Parse.Object.destroyAll(configs, {useMasterKey:true});
    });
}

function removeBadConfigs() {
    return queryForGroups(function(groups) {
        return removeConfigsWithGroups(groups);
    });
};

removeBadConfigs();

我想通了。我删除了 "useMasterKey: true",因为 1) 没有提升权限的对象不需要它,并且 2) 我在 Cloud Code 中没有 运行 它。