node.js - Node.js 核心中的 Promise

标签 node.js es6-promise

我听说 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/

相关文章:

javascript - ES6 Promise 错误处理

javascript - Mongoose 填充排序无法正常工作

node.js - Nodejs 上的 Jasmine 和 jasmine-reporters 缺少输出

angularjs - 显示来自 Redis 的编码数据

node.js - 如何使用 Express 将 powershell 命令结果推送到 NodeJs 中的 json 响应?

javascript - 当数组处理完毕后,如何退出 promise 序列?

javascript - 如何将创建的方法转换为使用 $q 库返回 promise 以使用 ES6 promise 。 Angularjs 应用到 Angular4+

Javascript - 处理异步竞争条件

具有可选+可变参数的 Node.js 指挥官

javascript - useState 与异步函数返回 Promise {<pending>}