CNode

把原生fs模块包装成promise的最佳实践是什么?

问答
Rrwing发布于10 年前最后回复10 年前15 回复6429 浏览0 收藏

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

查看回复

回复 (15)

Z
zhengnz#1·10 年前

promisifyAll From Noder

G
guohongxing#2·10 年前

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

R
rwing#3·10 年前
引用 guohongxing一般会这样去写:var promise = require('bluebird'); var fsAsync = promise.promisifyAll(require('fs'));

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

D
DevinXian#5·10 年前
引用 alsotanghttps://npm.taobao.org/package/mz

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

C
chita#6·10 年前

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

M
magicdawn#7·10 年前

@alsotang mz -> thenify-all -> thenify

R
rwing#8·10 年前
引用 alsotanghttps://npm.taobao.org/package/mz

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

A
alsotang#9·10 年前
引用 rwing@alsotang 我操,这个刁,能不能不加mz前缀?就跟require原生的一样?

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

R
rwing#10·10 年前
引用 alsotang@rwing 你同事习惯这么不好,去改他们的习惯吧

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

V
vincentLiuxiang#11·10 年前

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

I
i5ting#12·10 年前
引用 guohongxing一般会这样去写:var promise = require('bluebird'); var fsAsync = promise.promisifyAll(require('fs'));

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

R
rwing#15·10 年前
引用 alsotang@rwing 你同事坑,你也坑,你把标准库改了,以后你引用的包全都乱。

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

参与回复
登录后即可参与回复。登录