我听说 Promise 可用于 Node 核心 API。 例如,对于 fs,我们如何使用 Promise,我们是否只是省略回调?
fs.readFile(file).then(v => console.log(v));
或者我们如何使用?
目前,对于 10 之前的 Node.js 版本,我猜测,它位于一个标志后面?也许:node --promises
?
最佳答案
到目前为止,大多数基于 Node 回调的 API 都应该手动进行 Promise 才能使用 Promise。
util.promisify
自 Node 8(也为 polyfillable )起可用,并允许 promisify 任何使用错误优先回调的 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从 Node 10(Node 8 及更高版本中的 polyfillable)开始可用,并包含 promisified fs
模块,正如另一个问题中已经提到的:
const fsp = require('fs').promises;
fsp.readFile(file).then(console.log);
对于批量 promise 第三方工具,如 pify
可以使用。
第三方 promise 包可用于大多数内置和流行的第三方基于回调的包,这些包可以转换为 promise ,例如fs-extra
,这是 fs
的一个更好的直接替代品,其中包括基本的 graceful-fs
包。
关于node.js - Node.js 核心中的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51111181/