私はnodejsを初めて使っています。モジュールエクスポート変数が空であるのはなぜですか?
ここに私の.jsファイルがあります。私は他の関数にaudioData変数を公開しようとしています。 audioData変数の値が関数外で空になっています。私は、その関数の中で印刷するときの値を見ます。何が間違っていますか?
'use strict';
var asyncrequest = require('request');
var xml2js = require('xml2js');
var parseString = xml2js.parseString;
var audioData = [];
asyncrequest("http://example.com/feed", function(error, responsemeta, body) {
parseString(body, function(err, result){
var stories = result['rss']['channel'][0]['item'];
console.log("Total stories: " + stories.length);
stories.forEach(function(entry) {
var singleObj = {}
singleObj['title'] = entry['title'][0];
singleObj['value'] = entry['enclosure'][0].$.url;
audioData.push(singleObj);
});
});
console.dir(audioData);
});
module.exports = audioData;
console.log("Program ended");
「audioData」を変更する非同期要求を実行しています。この要求は、変数がエクスポートされた後に*実行されます。したがって、 'require'を使ったインポートは空の配列を取得します。要求が完了するまで空のままです。 – heartyporridge
@heartyporridge IIRC 'require()'は同期式なので、空の配列をエクスポートした後も、リクエストが完了してもそのままになります – spicypumpkin
@spicypumpkin Hm ...参照を返すのは 'require'しませんか?もし私が間違っていればそれを修正してください。 ...それぞれの 'require'はエクスポートされた変数の一意のスコープを生成しますか? – heartyporridge