我正在尝试使用bottleneck module,但是此问题适用于任何速率限制模块。
您可以像这样创建一个限制器
const limiter = new Bottleneck({
minTime: 333
});
但是如果我需要在多个文件中使用相同的限制器怎么办?我会再次创建限制器还是将其传递?
示例文件:
// Call to limit
module.exports = axios.get('some-endpoint').then(res => return res)
答案 0 :(得分:1)
这取决于您的用例。
比方说,您正在使用limiter
来限制对某些第三方API的请求,并且您要确保每秒仅发出3个请求,并且是从多个模块发出的。在这种情况下,是的,您需要传递该限制器并在多个模块中使用它。
在这种情况下,一种更好的设计是确保只有一个模块调用API,并且一个模块具有限制器。例如:
// api.js
const limiter = new Bottleneck({
minTime: 333
});
module.exports = {
makeRequest: limiter.wrap(options => {
// interact with API and return response
});
};
然后,每个其他模块仅使用内部API:
// some-other-module.js
const api = require('./api');
module.exports = {
createCustomer: (options) => {
return api.makeRequest({ ... });
}
};
通过这种方式,限制器仅存在于您的应用程序中的某个地方,但与该API进行交互的所有模块都会使用该限制器。
(如果您与多个供应商进行交互,那么当然有一个限制器,每个供应商具有不同的设置是很有意义的。)