[问题] node.js循环读取档案问题

楼主: jikker (鲁蛇王)   2016-05-17 13:49:15
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);
}
});
}
});
}
作者: illl (ill!)   2016-05-17 14:57:00
(function(file_path){check_file(...)})(file_path);
作者: icydream (巧虎)   2016-05-18 00:34:00
能否提供check_file()的程式码?
楼主: jikker (鲁蛇王)   2016-05-18 00:38:00
大大可以说的详细一点吗? 或者该用什么关键字去搜寻?
作者: Kenqr (function(){})()   2016-05-18 10:22:00
呼叫check_file时传进去时的file_path是正确的我猜back.path也是正确的,你可以把它console.log出来看看
作者: lucky1lk (赌到没钱的人)   2016-05-18 13:04:00
用WHILE? 读取完后 再i=i+1 ?
作者: shadowjohn (转角遇到爱)   2016-05-18 13:15:00
只推一楼
楼主: jikker (鲁蛇王)   2016-05-19 00:45:00
我用1F大大的方式 成功了 可是我不懂原理@@back.path是错的 因为一开始拿到的file_path就是错的
作者: illl (ill!)   2016-05-19 02:08:00
function scope, closure看ㄧ下
作者: Kenqr (function(){})()   2016-05-19 10:45:00
https://jsfiddle.net/h44faj8x/check_file收到的file_path是正确的假如back.path有错,表示问题是出在check_file里面
作者: rarex (╰(〒皿〒)╯)   2016-05-29 20:52:00
因为读档案是异步的 当你循环跑完以后才会开始读所以你的function里面拿到的档名永远是最后一个写js在loop里面包function就要特别小心这种事情

Links booklink

Contact Us: admin [ a t ] ucptt.com