Parse.com - 修改后台作业中的所有用户.each()不能处理订单而.find()完成得太快

Xu *_*Yin 3 parse-platform

我试图获取所有用户数据,并按年龄降序排序,然后修改每个人的年龄.但是当我使用时query.find(),它完成得太快了.只有前2或3位年龄的用户才能正确保存.然后我尝试使用query.each(),但它不适用于降序.

以下是我使用query.each()时的代码,如果我没有订购它,它将正确保存所有用户,但我需要订购它们并根据订单更改它们的年龄.

Parse.Cloud.job("ChangeUserAge", function(request, status) {
    Parse.Cloud.useMasterKey();
    var counter = 0;
    var query = new Parse.Query(Parse.User);
    query.descending("age, name");
    query.each(function(user) {
        counter += 1;
        user.set("age", counter);
            return user.save();
    }).then(function() {
        // Set the job's success status
        status.success("ChangeUserAge completed successfully.");
    }, function(error) {
        // Set the job's error status
        status.error("ChangeUserAge went wrong.");
  });
});
Run Code Online (Sandbox Code Playgroud)

这里是我使用query.find()时的代码,问题是完成得太快.只有2或3个用户正确保存.

Parse.Cloud.job("RankingAllUserBasedOnDiamonds", function(request, status) {
    Parse.Cloud.useMasterKey();
    var query = new Parse.Query(Parse.User);
    query.descending("age, name");
    query.find().then(function(results) {
        for(var i = 0; i < users.length; i++)
        {
            var user = users[i];
            user.set("age", i+1);
            user.save();
        }
    }).then(function() {
         // Set the job's success status
             status.success("ChangeUserAge completed successfully.");
    }, function(error) {
        // Set the job's error status
            status.error("ChangeUserAge went wrong.");
     });
});
Run Code Online (Sandbox Code Playgroud)

Xu *_*Yin 5

经过几个小时的研究和测试.最后找到一种更新.find()中所有对象的方法.它是Parse.Object.saveAll.我将所有需要更新的对象推送到一个数组中,然后使用成功和错误块调用saveAll.

但就像Fosco所说的那样,只有前1000条记录被返回,所以我用一个起始索引参数手动运行后台作业几次.

这是我的代码:

Parse.Cloud.job("RankingAllUserBasedOnDiamonds", function(request, status) {
    Parse.Cloud.useMasterKey();
        var usersToSave= [];
        var query = new Parse.Query(Parse.User);
        query.descending("age, name");
        query.find().then(function(results) {
            for(var i = 0; i < users.length; i++)
            {
                var user = users[i];
                user.set("age", i+1);
                usersToSave.push(user);
            }
        }).then(function() {
          Parse.Object.saveAll(usersToSave, {
            success: function(list) {
                // All the objects were saved.
                if (status) {
                    status.success("Update completed successfully.");
                };
                console.log("saveInBackground success");
            }, error: function(model, error) {
                // An error occurred while saving one of the objects.
                if (status) {
                    status.error(error);
                };
                console.log("saveInBackground error: " + error.message);
            });
        }, function(error) {
            // Set the job's error status
            status.error("ChangeUserAge went wrong.");
        });
});
Run Code Online (Sandbox Code Playgroud)

希望可以帮助某人有同样的问题.