Node.js核心中的承诺

1 node.js es6-promise

我听说Promise适用于Node核心API。例如,对于fs,我们如何使用Promise,是否仅省略了回调?

fs.readFile(file).then(v => console.log(v)); 
Run Code Online (Sandbox Code Playgroud)

或我们如何使用?

目前,对于早于10的Node.js版本,我想这是一个标志吗?也许:node --promises?

Est*_*ask 5

到目前为止,大多数基于Node回调的API都应手动进行承诺,以便使用Promise。

util.promisify是可用的,因为节点8(也polyfillable),并允许对任何promisify的API,使用错误第一回调,包括内置fs:

const { promisify } = require('util');
const fs =  require('fs');
const readFile = promisify(fs.readFile);

readFile(file).then(console.log);
Run Code Online (Sandbox Code Playgroud)

一些使用非错误优先回调的API也通过util.promisify.custom符号支持它,例如setTimeout:

promisify(setTimeout)(100).then(...);
Run Code Online (Sandbox Code Playgroud)

fs.promises实验API是可用的,因为节点10(polyfillable在节点8和更高的),并包含promisified fs模块,如已经在另一问题中提到:

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

fsp.readFile(file).then(console.log);
Run Code Online (Sandbox Code Playgroud)

对于批量承诺,pify可以使用第三方工具。

第三方承诺包可用于大多数内置且流行的基于第三方回调的包,这些包可以转换为Promise,例如fs-extra,这是首选包的替代,fs其中包括必需graceful-fs包。