我是否需要在每个模块文件中使用Promise.promisifyAll()?

时间:2017-06-11 00:15:40

标签: javascript node.js promise bluebird

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

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

并且只导入该模块?

如果我做对了,我的第一个选择是每次都会满足fs模块,而第二个只会链接到同一个模块,这只是一次令人满意。或者像我的第二个一样,是我的第一选择吗?

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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



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

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