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

Do i need Promise.promisifyAll() in every module file?

如果我需要在多个文件中使用 Promise (Bluebird),我应该每次都调用 Promise.promisifyAll(require('fs')) 吗? 或者使用

的小模块会更好吗?
module.exports = Promise.promisifyAll(require('fs'))

并且只导入那个模块?

如果我做对了,我的第一个选择每次都会承诺 fs 模块,第二个只会 link 到同一个模块,只有一次承诺。还是我的第一选择会像我的第二选择一样?

编辑: 我测试了两个选项:

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'))

结果是: 时间过去了 1 测试:891 时光荏苒 2 测试:10

所以我的理论是对的,第二种更快

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

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



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

两种解决方案都可以,我认为您应该评估使用其中一种的性能。