【发布时间】:2018-12-09 04:57:11
【问题描述】:
我听说 Promises 可用于 Node 核心 API。 比如fs,怎么用promise,直接省略callback吗?
fs.readFile(file).then(v => console.log(v));
或者我们如何使用?
目前对于 Node.js 版本早于 10,我猜,它的背后是一个标志?也许:node --promises?
【问题讨论】:
标签: node.js es6-promise
我听说 Promises 可用于 Node 核心 API。 比如fs,怎么用promise,直接省略callback吗?
fs.readFile(file).then(v => console.log(v));
或者我们如何使用?
目前对于 Node.js 版本早于 10,我猜,它的背后是一个标志?也许:node --promises?
【问题讨论】:
标签: node.js es6-promise
到目前为止,大多数基于 Node 回调的 API 都应该手动进行承诺,以便使用承诺。
util.promisify 从 Node 8 开始可用(也是 polyfillable),并允许承诺任何使用错误优先回调的 API,包括内置的 fs:
const { promisify } = require('util');
const fs = require('fs');
const readFile = promisify(fs.readFile);
readFile(file).then(console.log);
一些使用非错误优先回调的 API 也通过 util.promisify.custom 符号支持它,例如setTimeout:
promisify(setTimeout)(100).then(...);
fs.promises experimental API 从节点 10 开始可用(polyfillable 在节点 8 及更高版本中)并包含承诺的 fs 模块,正如另一个问题中已经提到的:
const fsp = require('fs').promises;
fsp.readFile(file).then(console.log);
对于批量承诺,可以使用pify 等第三方工具。
第三方 Promisification 包可用于大多数内置和流行的第三方基于回调的包,这些包可以转换为 Promise,例如fs-extra,它是 fs 的首选替代品,其中包括基本的 graceful-fs 包。
【讨论】:
此实验性功能是在节点 v10.0.0 中添加的。您需要使用 fs/promises 而不是 fs
【讨论】:
require('fs').promises。
require('fs').promises。他们不会将其标记为实验性的。
fs/promises 是最新代码显示的内容。它从fs.promises 更改为。不确定它是否已经发布,当然还没有与文档同步。
master 使用 fs.promises。
使用可以使用mz:
var fs = require('mz/fs');
【讨论】: