考慮下面給出的代碼。在這裏,我正在閱讀四個文件,其中三個是json,另一個是html。函數readJson逐個讀取文件並返回承諾或者resverd或者被拒絕。所以我的問題是,如果前三個文件被讀取沒有任何錯誤,除了最後一個index.html
,那麼前三個文件應該被記錄,除了最後一個。但是,這並不是程序不打印任何文件。爲什麼?檢查以下承諾代碼
var pages = [
"a.json",
"b.json",
"c.json",
"index.html"
];
var fs = require('fs');
function readJson(page){
console.log("this file name is:",page);
return new Promise(function(resolve,reject){
fs.readFile("./"+page,"utf8",function(err,res){
if(err){
reject(err);
}else{
try {
resolve(JSON.parse(res));
} catch (ex) {
reject(ex);
}
}
});
});
}
function readAll(pages){
return Promise.all(pages.map(readJson));
}
readAll(pages).then(function(allPages){
allPages.forEach(function(page){
console.log("++++++++++++++++++++++++++++++++++++++++++");
console.log(page);
});
})
.catch(function(err){
console.log("-----------------------------------------------");
console.log(err);
})
,因爲這是Promise.all'如何'卷......一個拒絕,會導致'Promise.all'拒絕 - 當然,你('')'而不是在'readJson'中拒絕 –
你可以使用'readJson'中的邏輯來調用'JSON.parse()'或不把'res'傳遞給'resolve()'。 – guest271314
你們的意思是說如果一個拒絕或錯誤發生,所有的承諾都會被拒絕,無論他們是否履行。那麼使用諾言有什麼好處?無論如何,我可以通過鏈接諾言來實現這一點。 – nurulnabi