1

したがって、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 の問題に対する答えは、コードを無名関数でラップすることだと思われるのはなぜですか?

4

1 に答える 1

2

作成するすべてのrelation.query()には、クロージャまたは無名関数と呼ばれるものが必要です。「字句スコープの詳細」を参照してください| http://mark-story.com/posts/view/picking-up-javascript-closures-and-lexical-scoping

于 2013-01-08T21:16:56.753 に答える