我正在尝试使用bluebird来承诺fs readdir功能。我只想读取目录中的所有文件,然后输出带有console.log
的数组。
const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));
fs.readdir('./XML').then(function(err, directories) {
console.log(directories);
});
得到以下输出:
fs.readdir("。/XML")。然后(function(err, directories) {^
TypeError: Cannot read property 'then' of undefined在对象。(/用户/shooshte/Sportradar/notThatKindOfPeon/bluebird.js: 4:20)在模块。_compile (module.js 570:32):at Object.Module._extensions. js (module.js:579:10)在模块。负载(module.js 487:32):at tryModuleLoad (module.js:446:12)在Function.Module。_load (module.js 438:3):at Module.runMain (module.js:604:10)(bootstrap_node.js:394:7)启动时(bootstrap_node.js:149:9)在bootstrap_node.js: 509:3
我做错了什么?
似乎库在方法名中添加了"Async":它对我来说是这样的:
const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));
fs.readdirAsync('./XML').then(function(directories) {
console.log(directories);
});
fs.readdirAsync('./XML').then()
文档,第二句:
承诺的方法名将是原始方法名加后缀(默认为"Async")。
您可能希望只承诺要使用的函数:
const readdir = require('bluebird').promisify(require('fs').readdir);
return readdir(dir).then(function(err, files) {
console.log('FILES', files)
return files;
});