在 Node v12.13.0 中未调用 fsPromises.writeFile 回调

Posted

技术标签:

【中文标题】在 Node v12.13.0 中未调用 fsPromises.writeFile 回调【英文标题】:fsPromises.writeFile callback not being called in Node v12.13.0 【发布时间】:2020-02-23 08:58:21 【问题描述】:

无论出于何种原因,fs.promises 的回调都没有被调用,但文档没有提到它只有在出现错误时才会被调用,这就是我假设会发生的情况......

fsp.writeFile('test.txt', 'callback doesnt work', 'utf8', (error) => 
  console.log('callback is never called')
  if (error) console.error(error)
)

这在 Node 12.13.0 版本上发生(或不发生,哈哈)。

有人知道这是怎么回事吗?

【问题讨论】:

【参考方案1】:

fs.promises 版本的异步调用返回承诺。他们不接受回调。如果要使用回调,请使用常规的 fs 版本。

您可以看到right here in the doc 没有为 API 的 fsPromises 版本传递回调的选项。

你应该这样做:

const fsp = require('fs').promises;

fsp.writeFile('test.txt', 'promise works', 'utf8').then(() => 
    console.log("write successful");
).catch(err => 
    console.error(err);
);

或者,在async 函数中,您可以使用try/catchawait 而不是.then().catch()

【讨论】:

哦是的有道理,但是为什么documentation 说有回调?大声笑 哦,是的,对不起,我绊倒了。如果你还不能告诉我节点对我来说是新的,哈哈 @PrimitiveNom - 您正在查看文档的 fs.writeFile() 部分,而不是 fs.promises.writeFile() portion of the doc。 是的,我在查看您编辑中的链接后注意到了这一点。无论如何,以下语法是否足以处理承诺? fsp.writeFile('test.txt', 'testing', error => error) 还是我应该以不同的方式处理承诺?承诺对我来说也是新的:/ @PrimitiveNom - 你看到这个How to chain and share prior results with promises了吗?请注意使用async/await 是多么简单。

以上是关于在 Node v12.13.0 中未调用 fsPromises.writeFile 回调的主要内容,如果未能解决你的问题,请参考以下文章

Vue 中未调用计算属性集

Vue 中未调用计算属性集

获取调用中未定义标头

DOM 中未更新默认选择选项,即使 v-model 属性正在更新

AJAX调用中未定义的id是什么

如何修复'TypeError:无法读取 Javascript 中未定义的属性'标题'