作者jikker (鲁蛇王)
看板Ajax
标题[问题] node.js回圈读取档案问题
时间Tue May 17 13:49:15 2016
hi 各位大大好
小鲁想用node.js弄个for回圈帮我读取xlsx档(用node-xlsx套件)
但是遇到一点小问题 就是file_path 总是拿到回圈的最後一个数字
例如: i=100
不知道该如何修正我的程式才能正确的读取每一个档案?
for(var i=1; i<=100;i++){
file_path = i+'.xlsx'; // 档名
check_file(file_path, function(back){ //确认档案存在
console.log(file_path);
if( back.status == 1){
load_xlsx(back.path, function(data){
// 档案存在 读取xlsx
report[data[0]] = data[1];
count++;
if(count > 100){
console.log(report);
}
});
}
});
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.87.162.162
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Ajax/M.1463464158.A.591.html
※ 编辑: jikker (219.87.162.162), 05/17/2016 13:49:47
1F:→ illl: (function(file_path){check_file(...)})(file_path); 05/17 14:57
2F:推 icydream: 能否提供check_file()的程式码? 05/18 00:34
3F:→ jikker: 大大可以说的详细一点吗? 或者该用什麽关键字去搜寻? 05/18 00:38
4F:→ Kenqr: 呼叫check_file时传进去时的file_path是正确的 05/18 10:22
5F:→ Kenqr: 我猜back.path也是正确的,你可以把它console.log出来看看 05/18 10:22
6F:→ lucky1lk: 用WHILE? 读取完後 再i=i+1 ? 05/18 13:04
7F:推 shadowjohn: 只推一楼 05/18 13:15
8F:→ jikker: 我用1F大大的方式 成功了 可是我不懂原理@@ 05/19 00:45
9F:→ jikker: back.path是错的 因为一开始拿到的file_path就是错的 05/19 00:45
10F:推 illl: function scope, closure看ㄧ下 05/19 02:08
11F:→ illl: 也可以用 (let i=0; ....) 05/19 07:25
13F:→ Kenqr: check_file收到的file_path是正确的 05/19 10:45
14F:→ Kenqr: 假如back.path有错,表示问题是出在check_file里面 05/19 10:46
15F:→ rarex: 因为读档案是非同步的 当你回圈跑完以後才会开始读 05/29 20:52
16F:→ rarex: 所以你的function里面拿到的档名永远是最後一个 05/29 20:52
17F:→ rarex: 写js在loop里面包function就要特别小心这种事情 05/29 20:53