我对回调相对较新,并且未能成功获得以下代码。我已经使用async.map函数将每个Web调用的数据返回到其各自的页面。但是,即使console.log(return)
之前的[ , undefined]
返回网页的html,我的console.log(data)
也会返回callback(data)
。这是我的代码:
var http = require("http"),
fs = require("fs"),
page, chap, ot,
async = require("async");
ot = fs.open('ot.txt', 'w');
page = "test";
chap = 2;
function getData(url, callback) {
var data = "";
var options = {
host: "rs.au.com",
port: 80
}
options.path = url;
console.log("request sent to: http://" + options.host + options.path);
var req = http.request(options, function(res) {
console.log("Response received " + res.statusCode);
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function(e) {
console.log(data);
callback(e, data);
});
}).end();
}
function main() {
var pathArr = [];
for ( var i = 1; i <= chap; i++ ) {
pathArr[i] = "/".concat(page, "/", i, ".html");
}
async.map(pathArr, getData, function(err, result) {
console.log("The result is :" + result);
});
}
main();
有人可以指出为什么我的代码无效以及我如何纠正它?
非常感谢!
编辑:在Brandon Tilley的回复之后,我将回调函数从callback(data)
修改为callback(e, data)
,但是我现在没有得到回复console.log
输出
答案 0 :(得分:2)
Async库假设您的回调符合标准Node.js回调签名,即callback(err, others...)
。由于您将data
作为第一个参数传递,因此Async认为这是一个错误。您应该使用callback(e, data)
代替(如果没有错误,e
将是null
。)
<强> [更新] 强>
另一个问题是您的阵列不正确。由于i
从1开始并一直升至chap
,因此pathArr[0]
未定义。变化:
pathArr[i] = "/".concat(page, "/", i, ".html");
到
pathArr[i-1] = "/".concat(page, "/", i, ".html");