私は約束事と非同期関数を試しています。今すぐ私はファイル名のリストのためにファイルfilenames.txt
を読んで、それを配列として解析して、別のreadFile
が各ファイルの内容を読んでコンソールに記録するスクリプトを用意しています。どういうわけかコンソールはundefined
になります。私は非同期fileReadで約束を連鎖しようとしていますが、私は定義されていません
これは私のコードです:
var Promise = require('bluebird');
var fs = require('fs');
var path = require('path');
getFilenames = function(){
return new Promise((resolve, reject) => {
fs.readFile('filenames.txt', 'utf8', (err,data) => {
if(err) return reject(err);
resolve(data);
});
});
}
getFilenames().then(fileNames => {
fileNames = fileNames.substr(0,fileNames.length-1).split(' ');
Promise.all(fileNames.map(file => {
return new Promise((resolve, reject) => {
fs.readFile(path.join('./',file), 'utf8', (err, data) => {
if (err) return reject (err);
resolve(data);
});
});
}));
}).then(values => console.log(values)).catch((err) => console.log(err));
コードだけでトリックをしたPromise.all' – Shaharyar