bluebird - fs.readdir().then - 无法读取未定义的属性

Posted

技术标签:

【中文标题】bluebird - fs.readdir().then - 无法读取未定义的属性【英文标题】:bluebird - fs.readdir().then - cannot read propery then of undefined 【发布时间】:2017-04-02 13:39:54 【问题描述】:

我正在尝试使用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').then(function(err, 目录) ^

TypeError:无法读取未定义的属性“then” 在对象。 (/Users/shooshte/Sportradar/notThatKindOfPeon/bluebird.js:4:20) 在 Module._compile (module.js:570:32) 在 Object.Module._extensions..js (module.js:579:10) 在 Module.load (module.js:487:32) 在 tryModuleLoad (module.js:446:12) 在 Function.Module._load (module.js:438:3) 在 Module.runMain (module.js:604:10) 运行时(bootstrap_node.js:394:7) 启动时(bootstrap_node.js:149:9) 在 bootstrap_node.js:509:3

我做错了什么?

【问题讨论】:

【参考方案1】:

似乎库在方法名称中添加了“Async”: 它对我有用:

const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));

fs.readdirAsync('./XML').then(function(directories) 
  console.log(directories);
);

【讨论】:

【参考方案2】:
fs.readdirAsync('./XML').then()

Documentation, second sentence:

promisified 方法名将是原始方法名加后缀(默认为“Async”)。

【讨论】:

【参考方案3】:

您可能只想承诺您将要使用的功能:

const readdir = require('bluebird').promisify(require('fs').readdir);

return readdir(dir).then(function(err, files) 
  console.log('FILES', files)
  return files;
);

【讨论】:

以上是关于bluebird - fs.readdir().then - 无法读取未定义的属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 fs.readdir 和 fs.statSync 返回 ENOENT,没有这样的文件或目录错误

将 `fs.readdir` 与 `.then` 链接以返回一个数组

我可以等待 fs.readdir 但我不知道为啥

Node.js fs.readdir 递归目录搜索

Node.js fs.readdir 递归目录搜索

Node.js fs.readdir 递归目录搜索