Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Parse.com云作业承诺与嵌套查询_Javascript_Parse Platform_Promise - Fatal编程技术网

Javascript Parse.com云作业承诺与嵌套查询

Javascript Parse.com云作业承诺与嵌套查询,javascript,parse-platform,promise,Javascript,Parse Platform,Promise,我在Parse.com上有一个游戏,用户提交意见,其他玩家投票 我正在尝试编写一个云背景作业,用投票总数更新我所有用户的帐户,这些投票总数是他们提交的每一次投票总数的总和 我尝试了5种不同的方法,但无法运行嵌套查询(更不用说更新和保存了) 这里是文档和一篇有用的博文 这是我的最新消息,非常感谢您的帮助 编辑:感谢@axymous让我看得清楚,我需要明确创建并立即返回承诺,然后在回调中解决它 Parse.Cloud.job("calculateUserTotals", function(req

我在Parse.com上有一个游戏,用户提交意见,其他玩家投票

我正在尝试编写一个云背景作业,用投票总数更新我所有用户的帐户,这些投票总数是他们提交的每一次投票总数的总和

我尝试了5种不同的方法,但无法运行嵌套查询(更不用说更新和保存了)

这里是文档和一篇有用的博文

这是我的最新消息,非常感谢您的帮助

编辑:感谢@axymous让我看得清楚,我需要明确创建并立即返回承诺,然后在回调中解决它

Parse.Cloud.job("calculateUserTotals", function(request, status) {
    Parse.Cloud.useMasterKey();
    var query = new Parse.Query(Parse.User);
    query.find().then(function(users) {
        var promises = [];
        _.each(users, function(user) {
            promises.push((function(user){
                var promise = new Parse.Promise();
                console.log(user.toJSON().objectId);  // user objectId is correct here
                var submissionQuery = new Parse.Query('submission');
                submissionQuery.equalTo('user', user.toJSON().objectId);
                submissionQuery.find({  // this doesnt seem to ever run, i have tried .each as well
                    success: function(submissions) {
                        var votes = 0;
                        for (var i=0; i<submissions.length; i++) {
                            var submission = submissions[i];
                            votes = votes + submission.get('votes').length;
                        }
                        user.set('submission_count', submissions.length);
                        user.set('vote_count', votes);
                        user.save({
                            success: function(user) {
                                promise.resolve();
                            }
                        });
                    },
                    error: function(error) {
                        status.error(error);
                    }
                });
                return promise;
            })(user));
        });
        return Parse.Promise.when(promises);
    })
    .then(function() {
        status.success('leaderboard updated.');
    });
});
Parse.Cloud.job(“calculateUserTotals”,函数(请求,状态){
Parse.Cloud.useMasterKey();
var query=newparse.query(Parse.User);
query.find().then(函数(用户){
var承诺=[];
_.每个(用户、功能(用户){
promises.push((函数(用户)){
var promise=new Parse.promise();
console.log(user.toJSON().objectId);//这里的用户objectId是正确的
var submissionQuery=newparse.Query('submission');
submissionQuery.equalTo('user',user.toJSON().objectId);
submissionQuery.find({//)这似乎从未运行过,我已经尝试过了。每一次都是如此
成功:功能(提交){
var票数=0;

对于(var i=0;i,我需要显式创建并立即返回承诺,然后在回调中解决它。谢谢@axymous

Parse.Cloud.job("calculateUserTotals", function(request, status) {
    Parse.Cloud.useMasterKey();
    var query = new Parse.Query(Parse.User);
    query.find().then(function(users) {
        var promises = [];
        _.each(users, function(user) {
            promises.push((function(user){
                var promise = new Parse.Promise();
                console.log(user.toJSON().objectId);  // user objectId is correct here
                var submissionQuery = new Parse.Query('submission');
                submissionQuery.equalTo('user', user.toJSON().objectId);
                submissionQuery.find({  // this doesnt seem to ever run, i have tried .each as well
                    success: function(submissions) {
                        var votes = 0;
                        for (var i=0; i<submissions.length; i++) {
                            var submission = submissions[i];
                            votes = votes + submission.get('votes').length;
                        }
                        user.set('submission_count', submissions.length);
                        user.set('vote_count', votes);
                        user.save({
                            success: function(user) {
                                promise.resolve();
                            }
                        });
                    },
                    error: function(error) {
                        status.error(error);
                    }
                });
                return promise;
            })(user));
        });
        return Parse.Promise.when(promises);
    })
    .then(function() {
        status.success('leaderboard updated.');
    });
});
Parse.Cloud.job(“calculateUserTotals”,函数(请求,状态){
Parse.Cloud.useMasterKey();
var query=newparse.query(Parse.User);
query.find().then(函数(用户){
var承诺=[];
_.每个(用户、功能(用户){
promises.push((函数(用户)){
var promise=new Parse.promise();
console.log(user.toJSON().objectId);//这里的用户objectId是正确的
var submissionQuery=newparse.Query('submission');
submissionQuery.equalTo('user',user.toJSON().objectId);
submissionQuery.find({//)这似乎从未运行过,我已经尝试过了。每一次都是如此
成功:功能(提交){
var票数=0;

对于(var i=0;iOne问题,我看到:在“promissions.push(…)”中,您正在推送一个立即调用的函数表达式,但我没有看到该函数返回的任何承诺,我假设,它应该插入到“promissions”中array.oh伙计,当然,感谢@axymous forest为我编辑的问题提供了大量树木,您应该提交作为答案。@bkellgren请将您的编辑作为答案发布,并接受它,以便将来的访问者知道问题已经解决:)您的两个代码示例完全相同。您更改了什么?