查询内部Parse Cloud For Loop

时间:2015-08-13 23:47:01

标签: javascript jquery parse-platform promise cloud-code

我一直试图运行我的Parse Cloud Code一段时间,似乎无法解决这个问题:

我有一个名为 IDArray 的Parse objectId数组。然后我发送数组作为PFCloud调用的参数。将阵列发送到Cloud Code后,我无法似乎成功创建了for loop,并在Parse for 上更新了存储为“点”的数值每个 objectId

简而言之,这就是我想要完成的任务:

  • 我只需要让for loop通过每个 objectId并为每个ID执行操作。

我一直试图让它工作一段时间,但没有运气。这是我一直试图操纵的代码 - 希望它会给某人一个回答我问题的起点。

Parse.Cloud.define('updateAllUsers', function(request, response) {
    var UserData = Parse.Object.extend('UserData');
    var query = new Parse.Query(UserData);
    var list = request.params.listID;
    var currentuser = request.params.user;

                   
    for (var i = 0; i < list.length; i++) {
                   
        var userdata = list[i];        
        query.get(userdata, {
                                       
            success: function(UserData) {
                               
                response.success('Should add up');
                UserData.addUnique('Done', +1);
                UserData.save();
            },
            error: function() {
                response.error('something went wrong' );
            }
        });
    }
});

如果有人能帮助我,我将非常感激。谢谢

1 个答案:

答案 0 :(得分:1)

我认为问题是你多次发送回复,你应该等待所有承诺完成然后发送回复:

Parse.Cloud.define('updateAllUsers', function(request, response) {
    var UserData = Parse.Object.extend('UserData');
    var query = new Parse.Query(UserData);
    var list = request.params.listID;
    var currentuser = request.params.user;

    function checkUserData(userdata){   // returns parse promise for a particular userdata
        return query.get(userdata).then(function(){
            UserData.addUnique('Done', +1);
            UserData.save();            
        });
    }

    Parse.Promise.when(list.map(checkUserData)) // mapping all the elements in the list to resp promises
        .then(function(){   // on success
            response.success('Should add up');
        }).catch(function(e){    // on failure
             response.error('something went wrong' );
        });
});

修改:如果由于某些原因导致map不可用(如果旧浏览器或list不是正常的javascript数组),您可以执行以下操作:

Parse.Cloud.define('updateAllUsers', function(request, response) {
    var UserData = Parse.Object.extend('UserData');
    var query = new Parse.Query(UserData);
    var list = request.params.listID;
    var currentuser = request.params.user;
    var promises = [];
    function checkUserData(userdata){   // returns parse promise for a particular userdata
        return query.get(userdata).then(function(){
            UserData.addUnique('Done', +1);
            UserData.save();            
        });
    }

    for(var i=0;i<list.length;i++){
        promises.push(checkUserData(list[i]));
    }


    Parse.Promise.when(promises) // once all the promises are resolved...
        .then(function(){   // on success
            response.success('Should add up');
        }).catch(function(e){    // on failure
             response.error('something went wrong' );
        });
});