栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用异步/等待+蓝鸟来PromisifyAll

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用异步/等待+蓝鸟来PromisifyAll

我正在构建一个使用async / await的库,我想知道是否可以在async / await中使用诸如fs之类的本机模块。

是。使用Bluebird可以比示例更简单:

let fs = Promise.promisifyAll(require('fs'));// and in async function:let contents = await fs.readFileAsync('file.txt', 'utf-8');

请注意,您需要

Async
在方法名称的末尾添加。

或者,您可以使用

mz
模块,而无需添加
Async
方法。看到:

  • https://www.npmjs.com/package/mz

一次使用后,您可能需要许多模块

npm installmz
-例如,您可以
require('mz/fs')
使用它,并且它立即使您可以使用
fs
返回promise 的模块版本,而不是进行回调。与async
await结合使用,您可以执行以下操作:

let fs = require('mz/fs');// and in async function:let contents = await fs.readFile('file.txt', 'utf-8');

上面的代码仍然是非阻塞的。

请参阅以下答案,在此我将显示模块

mz
版本的示例
crypto
并对其进行更详细的说明:

参见示例:

let crypto = require('mz/crypto');async function x() {  let bytes = await crypto.randomBytes(4);  console.log(bytes);}

您可以对许多其他模块执行相同的操作,包括:

  • child_process
  • crypto
  • dns
  • fs
  • readline
  • zlib

我知道async / await只是在后台执行Promises,所以…是否有一种本机的方法来实现方法或功能的实现?

很快,Node将以本机方式支持它-请参阅 PR#5020为Promises添加Core支持

  • https://github.com/nodejs/node/pull/5020

但在此期间您可以使用

mz

有关更多上下文,另请参见 问题#7549 v1:执行不带回调的异步函数应返回promises

  • https://github.com/nodejs/node-v0.x-archive/issues/7549

另请参阅节点的 承诺工作组存储库

  • https://github.com/nodejs/promises

更新: 似乎上述PR 5020不会很快降落在Node上,这要感谢Benjamin
Gruenbaum在评论中指出。因此,似乎使用Bluebird的

promisify
promisifyAll
有用的
mz
模块将是将语言的现代功能与Node的核心模块一起使用的唯一简便方法。幸运的是,它们工作得很好,所以这不是一个大问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号