把原生fs模块包装成promise的最佳实践是什么?
发布于 8 年前 作者 rwing 5572 次浏览 来自 问答

如题,在团队项目里,计划全程async/await,我现在是用bluebird的promisify包一层,然后放在一个fs-promise文件里,但是require的时候很丑啊,而且团队成员也都是习惯了require(‘fs’),再者,node原生的好多,我不能都包一层吧?问问大家都是怎么做的

15 回复

promisifyAll From Noder

一般会这样去写:var promise = require(‘bluebird’); var fsAsync = promise.promisifyAll(require(‘fs’));

@guohongxing @zhengnz 楼上两位没明白我的意思,我已经这么包了,但是你要变成公共的库供整个团队使用啊,团队成员还都用require(‘fs’),而且怎么把node所有callback的函数都包一遍?

@alsotang 维护者列表有两个死马大大…

只要你promisifyAll fs 是在其他同事之前,他们就不需要在调用promisifyAll 了 require fs 就能直接用async 返回promise 了

@alsotang 我操,这个刁,能不能不加mz前缀?就跟require原生的一样?

@rwing 你同事习惯这么不好,去改他们的习惯吧

@alsotang 额,为什么 ,我也想这么用,现在我自己弄了下,把fs的引用改了。。。整个程序require(‘fs’)都变成promise的了。。。。

如果有些api标准库覆盖不到的话,可以试试这个https://github.com/vincentLiuxiang/gen-async-promise 原理里很简单!

@guohongxing 我如果是非常多的方法,这样用是最好的,推荐

@rwing 你同事坑,你也坑,你把标准库改了,以后你引用的包全都乱。

@alsotang +1 标准库都敢乱来

@alsotang 哈哈哈哈 关键是标准库不出promise的啊,而且也应该不会乱吧?只是promise化了…兼容callback

回到顶部