3

私は次のコードを持っています:

var options1 = {
  host: 'maps.googleapis.com',
  port: 80,
  path: "/maps/api/geocode/json?latlng=" + lat + "," + lng + "&sensor=false",
  method: 'GET',
  headers: {
      'Content-Type': 'application/json'
  }
};

var body1 = "";

var req = http.request(options1, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    //console.log('BODY: ' + chunk);
    body1 += chunk;
  });
  res.on('close', function () {
    console.log('get_zillow : ' + body1);
  });
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

req.end();

console.log('get_zillow : ' + body1);

body1にJSON応答の結果を入力する必要があります。ただし、最初のconsole.log('get_zillow : ' + body1);呼び出しは呼び出されず、何らかの理由で結果が閉じられることはありません。2番目のconsole.log('get_zillow : ' + body1);呼び出しは非同期であり、body1入力される前に呼び出されるため、何も出力されません。

さらに、異なる外部サイトに対して同様のリクエストを連続して数回行う必要があります。各リクエストは、前の結果のjsonに依存しています。3つの厄介な内部コールバックを記述せずにこれを行う方法はありますか?そしてどういうわけかhttpリクエストの後にブロックしますか?

4

1 に答える 1

3

変化する

res.on('close', function () {
    console.log('get_zillow : ' + body1);
  });

res.on('end', function () {
     callback_function(body1);
});

//定義された新しい関数

function callback_function(finaldata)
{
 // handle your final data
}
于 2013-01-19T10:37:19.113 に答える