我是新來的節點,我遇到了解決異步承諾的問題。我的承諾沒有解決,我不確定我做錯了什麼。我仍然無法理解承諾和回調,所以任何反饋都是有幫助的。承諾不會解決
var filterFiles = function(){
return new Promise(function(resolve, reject){
fs.readdir(rootDir, function(err, files){
if(err) return console.log(err);
var task = function(file){
return new Promise(function(resolve, reject){
if(! /^\..*/.test(file)){
fs.stat(rootDir + '/' + file, function(err, stats){
if(stats.isDirectory()){
dirArray.push(file);
console.log(dirArray.length);
resolve(file);
}
if(stats.isFile()){
fileArray.push(file);
console.log(fileArray.length);
resolve(file);
}
})
}
})
};
var actions = files.map(task);
return Promise.all(actions).then(function(resolve, reject){
resolve({dirArray: dirArray, fileArray: fileArray});
});
})
})
}
filterFiles().then(function(data){
console.log(data);
var obj = {
fileArray: fileArray,
dirArray: dirArray
};
res.send(obj);
})
避免['Promise'構造函數反模式](https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it),永遠不會嵌套'新的Promise'調用! – Bergi
你的'Promise.all(actions).then(function(resolve,reject))'不起作用,因爲'.then'只傳遞一個參數,這個參數是前一個promise的結果。同樣,在第四行中,您使用'console.log'而不是調用帶有錯誤的'reject'。你也不會處理'fs.stat'中的一個錯誤,當文件不存在時可能發生錯誤。 – PaulBGD
在'task'中有許多'else'的情況,其中承諾永遠不會解決 – Bergi