1

尊敬的人......

这是我的 node.js 代码... https://gist.github.com/SkyKOG/99d47dbe5a2cec97426b

我试图解析我们考试结果的数据......示例...... http://www.vtualerts.com/results/get_res.php?usn=1MV09IS002&sem=7

我得到了结果......而且我正在往回遍历以前的似乎也是......所有的作品,但遍历发生在随机...... prolly 循环有问题......

            json.results = [];

            var output = '';

            var k = response.query.results.body.div.div[0].table[1].tr.length;

            for (var j = 1; j < k; j++) {

                for (var i = 0; i <= 5; i++) {
                    var result_obj = {};
                    result_obj.subjects = [];

                    for (key in response.query.results.body.div.div[0].table[1].tr[j].td[i]) {
                        if (typeof response.query.results.body.div.div[0].table[1].tr[j].td[i].em === "undefined") {
                            continue;
                        }

                        var subject_obj = {};

                        output += "Subject : " + response.query.results.body.div.div[0].table[1].tr[j].td[i].em + " " + "\n";

                        var subtext = response.query.results.body.div.div[0].table[1].tr[j].td[i].em + " " + "\n";
                        subject_obj.subjectname = subtext.replace(/[(].*[)]/, "").trim();

                        result_obj.subjects.push(subject_obj);
                        console.log(subject_obj);
                        break;

                    }

                    console.log(result_obj.subjects);

我认为有类似异步概念的东西需要正确实现才能以正确的顺序重新排序 sem...

并以这种格式获取 JSON ... https://gist.github.com/SkyKOG/3845d6a94cea3b744296 我不认为我在正确的范围内推动创建的对象...

请在这方面提供帮助....谢谢...

4

1 回答 1

1

(我将回答订购部分。建议将 JSON 问题作为一个单独的问题,以符合 Q&A 格式。)

当您在代码中发出 HTTP 请求时(请参见下面的行),您会为响应的执行顺序带来不同的延迟

new YQL.exec(queryname, function (response) {

您需要自己跟踪请求的顺序,或者使用库为您完成。

自己编码

为了解决这个问题,您需要一些东西来跟踪请求的原始顺序。由于闭包的工作方式,您不能只增加一个简单的计数器,因为随着循环的进行,它会在全局范围内发生变化。解决这个问题的惯用方法是将计数器传递给立即执行的函数(作为值类型)

例如

var responseData = [];
for ( var i = 0; i < 100; i++ ){
    (function(){
        ...
        // http call goes in here somewhere
            responseData[i] = data_from_this_response
        ...
    })(i)
}

使用图书馆

async.parallel()在曹兰优秀的图书馆查看电话。您将一个函数数组传递给它,它会返回一个包含结果数组的回调。

https://github.com/caolan/async/#parallel

您需要创建一个循环,用包含适当变量的函数的柯里化版本填充数组。

于 2013-05-23T08:54:56.043 回答