我的目標是遍歷文件目錄,對每個文件運行一些操作,並返回包含目錄子集的json對象。使用promise異步遍歷一組文件/ defer
我得到它在Node的fs庫中使用同步版本的調用,但我想找出最好的異步解決方案。我在異步版本上的失敗嘗試在下面使用Q庫推遲。無論我做什麼,我都無法推遲最後一步,直到迭代完成。
迭代成功完成,但不是在調用sendResponse()之前。
任何人都可以幫助我理解我做錯了什麼嗎?
router.get('/mediaTree', function(req, res){
var mediaTree = { "identifier" : "id", "label" : "name", "items" : []};
var idCounter = 1;
var fs_readdir = q.denodeify(fs.readdir);
fs_readdir(MEDIAPATH)
.then(function(files) {
files.forEach(function(dir) {
fs.stat(MEDIAPATH + dir, function(err, stats) {
if(err) { console.log(err); return; }
var thisFile = {};
if(stats.isDirectory()) {
thisFile.id = idCounter++;
thisFile.type = "branch";
thisFile.name = dir;
thisFile.path = MEDIAPATH + dir;
mediaTree.items.push(thisFile);
}
});
});
})
.then(sendResponse);
function sendResponse() {
res.json(mediaTree);
}
});
你是不是等待fs.stats打電話回來 –
http://blog.slaks.net/2015-01-05/introducing-promises/#composing-promises – SLaks
看起來這將是值得改變爲藍鳥。 – baao