我试图使用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