【发布时间】:2023-03-04 02:06:01
【问题描述】:
基本上我想遍历现有的 arrtickers 来获取每个符号
然后读取每个符号url里面的内容,并将内容保存到本地目录中。
在php中,它会一步一步打印出每个股票代码和每个符号。
但是在节点中,序列是混乱的。
它会先打印出所有的 url_optionable...
然后有时打印console.log('path:' + file),有时打印console.log("文件已保存!");
每次运行fs.writefile函数,sym值都没有检测到,保存的文件显示为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()来生成一个闭包。 -
谢谢,forEach 是异步的诀窍。 :)
标签: node.js asynchronous npm