我試圖使用q
承諾庫在目錄中獲取.json
文件的名稱並返回這些文件的內容。我能夠獲取文件名,但我無法使用arr.map
與promise,以便讀取文件的內容。我希望getContents()
能夠返回一個帶有指定文件名內容的映射數組。在地圖上使用q承諾獲取文件內容
function readDir() {
var deferred = q.defer();
fs.readdir('users', function(err, data) {
if (err) console.log(err);
deferred.resolve(data);
})
return deferred.promise;
}
function getContents(filenames) {
return filenames.map(function(filename) {
fs.readFile('users/' + filename, 'utf8', function(err, result) {
return result;
});
});
}
readDir()
.then(getContents)
.then(function(fileContents) {
// currently returns undefined
console.log(fileContents);
});
我怎樣才能正確地包裹getConents()
的承諾,使我的數組中的內容不等於不確定?
是否有使用'JSON.parse()來'對結果的簡單方法'Q.nfcall()'? – Himmel
只要執行'Q.nfcall(...).then(JSON.parse)'(就像每個其他承諾爲JSON文本一樣) – Bergi