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

标签 javascript node.js promise bluebird

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

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

并且只导入该模块?

如果我做对了,我的第一个选择将每次都 promise fs 模块,而第二个选择将仅链接到同一个模块,该模块仅 promise 一次。或者我的第一选择会像我的第二选择一样吗?

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

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

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

关于javascript - 我是否需要在每个模块文件中使用 Promise.promisifyAll() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44479258/

相关文章:

javascript - AngularJS $范围

Javascript:点击注入(inject)的按钮?

javascript - Angular : Seqential Promise chain

javascript - 获取值(value)数据并根据每个链接进行变化?

javascript - 如何仅解码部分 mp3 以与 WebAudio API 一起使用?

javascript - Loopback:我们如何修改内置模型函数的返回数据

ios - 如何使用 node.js 保护我的 api,并且只有我的应用程序正在使用此 api

node.js - 在nodejs中从CSV文件获取数据

javascript - 扩展 jQuery 的 Promise 对象中的 did()

javascript - 如何将现有回调 API 转换为 Promise?