1

私はコールバックに比較的慣れていないため、次のコードを機能させることができませんでした。async.map 関数を使用して、各 Web 呼び出しからそれぞれのページにデータを返しました。ただし、前のがWebページのhtmlを返しているにもかかわらず、私のconsole.log(return)は返されています。これが私のコードです:[ , undefined]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

4

1 に答える 1

2

Async ライブラリは、コールバックが標準の Node.js コールバック シグネチャであるcallback(err, others...). 最初の引数として渡しdataているため、Async はエラーと見なします。callback(e, data)代わりに使用する必要があります(エラーがない場合は になります) enull

[アップデート]

もう 1 つの問題は、配列が正しくないことです。iは 1 から までなのでchappathArr[0]は定義されていません。変化する:

pathArr[i] = "/".concat(page, "/", i, ".html");

pathArr[i-1] = "/".concat(page, "/", i, ".html");
于 2012-08-28T22:23:33.447 に答える