node.js 非同步變同步——獲取一個資料夾內的所有資料夾
阿新 • • 發佈:2019-01-31
獲取test資料夾內的所有資料夾:
var fs = require("fs"); fs.readdir('./test',function(err,files){ var wenjianjia = []; console.log(files); for(var i = 0;i<files.length;i++){ var filename = files[i]; fs.stat('./test/'+ filename,function(err,stats){ if(stats.isDirectory()){ wenjianjia.push(filename); } console.log(wenjianjia); }); } });
這是因為執行回撥函式時(非同步),for迴圈已經執行完,filename='ccc';
如果我們想要讀取一個資料夾,放進陣列後,在讀取第二個資料夾放入陣列,就必須同步操作
var fs = require("fs"); fs.readdir('./test',function(err,files){ var wenjianjia = []; (function iterator(i){ if(i==files.length){ console.log(wenjianjia); return; } var filename = files[i]; fs.stat('./test/'+ filename,function(err,stats){ if(stats.isDirectory()){ wenjianjia.push(filename); } iterator(i+1); }); })(0) });
或者不使用非同步函式fs.stat(),使用同步函式fs.statSync()
var fs = require("fs"); fs.readdir('./test',function(err,files){ var wenjianjia = []; for(var i = 0;i<files.length;i++){ var filename = files[i]; var stats = fs.statSync('./test/'+ filename); if(stats.isDirectory()){ wenjianjia.push(filename); } } console.log(wenjianjia); });