0
基本的には、各シンボルを取得するために既存のarrtickersをループしたいnode.js非同期の問題?
次に、各シンボルURLの内容を読み込んで内容をローカルディレクトリに保存します。
phpでは、各ティッカーと各シンボルをステップごとに印刷します。
しかし、ノードでは、シーケンスが混乱しています。それは最初にすべてのurl_optionableを出力します
...その後
時々印刷はconsole.log( 'パス:' +ファイル)、時々プリントはconsole.log( "ファイルが保存されました!");毎回はfs.writefile機能を介して実行、SYM値が検出されないZeissSが正しいとMSN-.htmlを
for(var v=0;v<arrtickers.length;v++)
{
var arrticker= arrtickers[v].split('@@');
var sym= $.trim(arrticker[1]);
url_optionable= "http://sample.com/ns/?symbol="+sym;
console.log('url_optionable: ' + url_optionable);
request({ uri:url_optionable }, function (error, response, body) {
if (error && response.statusCode !== 200) {
console.log('Error contacting ' + url_optionable)
}
jsdom.env({
html: body,
scripts: [
jqlib
]
}, function (err, window) {
var $ = window.jQuery;
var data= $('body').html();
var file= "msn-"+sym+".html";
console.log('path: ' + file);
fs.writeFile(file, data, function(err) {
if(err) {
console.log(err);
}
else
{
console.log("The file was saved!");
}
});
});
});
}
私が見ている問題はループです。コールバックが実行されるポイントで、ループが実行され、ループ内の変数に最後に実行された値が設定されます。クロージャを生成するには、 'arrtickers.forEach()'を使用します。 – ZeissS
ありがとう、forEachは非同期のトリックです。 :) –