0

多くの非同期リクエストの後に形成された最終的なオブジェクトを JSON ファイルに書き込む必要があります。

これが私のファイルのレイアウトです

var finalObj = {};
for(i=0;i<100;i++){
  request.get("http://example.com/get/" +i,function(err,res,body){
    var tObj = json.parse(body);
    finalObj[tObj.name] = tObj.value;
  }))
}

すべての応答オブジェクトを受け取った後、finalObj を json ファイルに保存したいと考えています。どうすればいいですか?

4

3 に答える 3

0

リクエストを受信するたびにインクリメントするカウンターを追加してみませんか?カウンターがリクエストの総数と一致したら、書き込みを行います。

var finalObj = {},
    requestCount = 100,
    ticks = 0;

for(i=0; i<requestCount; i++){
  request.get("http://example.com/get/" + i, function (err,res,body) {
    var tObj = json.parse(body);
    finalObj[tObj.name] = tObj.value;
    ticks++;

    // check if all 100 have been received
    if (ticks == requestCount) {
      // write file
    }
  })
}
于 2012-09-22T18:58:12.833 に答える
0

JSONが正しい場合、それはそのオブジェクトにデータを取得しますが、あなたが言ったように、リクエストは非同期です。すべてのリクエストが完了し、オブジェクトを書き込む準備ができたことを監視するコードを追加する必要があります。次に、JSON.stringify() を使用して Javascript オブジェクトを JSON に書き込むだけです。

于 2012-09-22T18:53:57.073 に答える
0

JSON.parse(body)本文を正しく解析する必要があることに注意してください。

最も簡単な方法は、完了時にインクリメントされるカウンターを使用し、すべてのリクエストを処理したかどうかを検出することです。

var finalObj = {};
var counter = 0;

for(i=0;i<100;i++){
  request.get("http://example.com/get/" +i,function(err,res,body){
    var tObj = JSON.parse(body);
    finalObj[tObj.name] = tObj.value;

    if (++counter === i) {
        require('fs').writeFile('foo.txt', JSON.stringify(finalObj), function (err) { 
            if (!err) {
                // celebrate
            }
        }); 
    }
  });
}

ファイル書き込み側の詳細については、ファイル システム モジュールを参照してください。ありがたいことに、ファイルへの書き込みプロセスを容易にするwriteFile機能があります。

于 2012-09-22T18:59:38.743 に答える