Node.js循环中的http.request

时间:2014-11-19 04:27:23

标签: node.js

使用函数保存数据。使用http.request选项。它工作正常。如果我在循环中调用相同的函数,一些数据不会保存在数据库中。还获得了一些响应的解析错误消息。

如何在循环中调用http.request的函数?

for (var i = 1; i <= 23; i++) {
    turn_timer(i);
}

function turn_timer(nos) {
    try {
        var str = "num=" + nos;
        var len = str.length;

        win_settings.headers = {
            'Content-length': len,
            'Content-Type': 'application/x-www-form-urlencoded'
        }

        var request = http.request(win_settings, function(response) {
            response.on('data', function(data) {

            });

            response.on('error', function(err) {

            });

            response.on('end', function() {

            });
        });

        request.on('error', function(err) {

        });

        request.write(str + "\0");
        request.end();

    } catch (err) {
        console.log(err);
    }
}

2 个答案:

答案 0 :(得分:0)

检查存储消息的变量的范围,因为异步函数调用可能会覆盖它。

答案 1 :(得分:0)

我相信你的问题是因为你正在使用for循环,而不是采用更异步的方法。这是一个快速尝试解决您的问题。我省略了一些代码,因为它似乎不完整。我已经离开了重要的部分,并根据similar question的答案添加了一些内容。

var http = require('http'),
    async = require('async');

function turn_timer(n, callback) {
    var var str = "num=" + n,
        len = str.length,
        req;

    win_settings.headers = {
        'Content-length': len,
        'Content-Type': 'application/x-www-form-urlencoded'
    };

    req = http.request(options, function(response) {
        ...
        callback(null);
    });

    req.on('error', function(err) {
        ...
        callback(err);
    });

    req.end();
}

async.timesSeries(23, function (n, next) {
    turn_timer(options, function(err) {
        next(err);
    });
});

有关详细信息,请在此处详细了解async.timesSerieshttps://github.com/caolan/async#timesseriesn-callback