我在每个模块文件中都需要Promise.promisifyAll()吗?

如果我需要与Promise(Bluebird)的多个文件中的fs,我应该每次调用Promise.promisifyAll(require('fs'))? 或者用一个小模块更好

module.exports = Promise.promisifyAll(require('fs')) 

并只导入该模块?

如果我做对了,我的第一个select就是每次都提供fs模块,而第二个select只会链接到同一个模块,而这个模块只有一次被启动。 或者将是我的第一个select像我的第二个select一样?

编辑:我testing了两个选项:

 const Promise = require('bluebird') let time1start = Date.now() for(let i = 0; i <= 1000;i++){ let fs = Promise.promisifyAll(require('fs')) } console.log('Time gone 1 Test: ' + (Date.now() - time1start)) let time2start = Date.now() for(let i = 0; i <= 1000;i++){ let fs = require('./testInc') } console.log('Time gone 2 Test: ' + (Date.now() - time2start)) 

testinc.js:

 module.exports = require('bluebird').promisifyAll(require('fs')) 

结果是:时间过去了1testing:891时间过去了2testing:10

所以我的理论是正确的,第二个更快

       

网上收集的解决方案 "我在每个模块文件中都需要Promise.promisifyAll()吗?"

在您的第一个解决scheme中,每当您需要时,都会生成fs的promisify版本。 但在第二种解决scheme中,promisify只会发生一次,当模块被加载到内存中时,那么每次使用它时,都只会指向同一个对象。

 // file fs-promise.js module.exports = Promise.promisifyAll(require('fs')); // other file const fsp = require('./fs-promise.js'); 

这两个解决scheme都可以工作,我想你应该评估一个或另一个的性能。