将值传递给嵌套的parse.com查询回调

时间:2013-01-08 21:08:09

标签: javascript parse-platform

所以,使用parse.com,我正在做一些嵌套查询......基本上,获取一个对象然后检索它的关系并做一些操作。

            pageQuery.find({
            success: function (results) {
                var pages = [];

                for (var result = 0; result < results.length; result++) {
                    var resArrayLength = pages.push(results[result].toJSON());
                    var indexOfLastPush = resArrayLength - 1;
                    console.log("resArrayLength = " + resArrayLength);
                    pages[indexOfLastPush].scrapeRules = new Array();
                    console.log("index of last push set to " + indexOfLastPush);
                    var relation = results[result].relation("RulesForPage");
                    //get the related scrape rules
                    relation.query().find({                            
                        success: function (rules) {
                            console.log("Found  " + rules.length + " rules");
                            for (var i = 0; i < rules.length; i++) {
                                console.log("rule index = " + i);
                                console.log("Found rule " + rules[i].id);
                                pages[indexOfLastPush].AllRules = new Array();

                                pages[indexOfLastPush].scrapeRules.push(rules[i].id);
                                console.log("pushed rule " + rules[i].get("name") + " to page at index " + indexOfLastPush);
                            }
                        }

                    });
                }

我看到的问题是我正在尝试indexOfLastPush来跟踪我需要的数组索引,但是这个值在回调发生时已经改变了。

如何将其传递给“成功”回调,以便获得我需要的索引?

更新:感谢@cggaurav的精彩提示。为什么看起来每个JavaScript问题的答案都是将代码包装在匿名函数中?

1 个答案:

答案 0 :(得分:2)

您必须为每个relation.query()创建一个名为闭包或匿名函数的函数。请参阅“有关词法范围的更多信息”| http://mark-story.com/posts/view/picking-up-javascript-closures-and-lexical-scoping