使用函数保存数据。使用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);
}
}
答案 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.timesSeries
:https://github.com/caolan/async#timesseriesn-callback