【发布时间】:2018-05-27 09:42:09
【问题描述】:
我在我的 Nodejs 项目中使用 Request 包以及 Node V.8.x 中引入的 Async/Await 函数来使用 3rd 方 API,一切正常很好,直到我遇到 API 提供者的限制;谁有每秒10个并发请求的限制。
我尝试了许多可用的 NPM 包,例如 rate-limiter 等,但最近发现了一个与我的问题相关的 article,它向我介绍了 qrate 包。
我尝试使用以下代码解决此问题:可能我需要使用回调而不是“完成”并在我的“fetchAPIDetails”中处理它——非常感谢任何帮助。提前谢谢你。
const async = require('async')
const request = require('request-promise')
const qrate = require('qrate')
const q = qrate(worker,1,5)
const worker = async (reqBody, options, done) => {
const options = { method: 'POST', url: apiURL, body: reqBody, timeout: 5000}
try{
const response = await request(options)
if(response.error){errorHandler(response.error); return {}}
else {
const body = response.body // Expecting XML
console.log(body.toString().slice(200,350))
return body
}
return done
}
catch(err){return errorHandler(err)} //errorHandler fn
}
const fetchAPIDetails = async () => {
const IdArr = [a,b,c] // An array of id, which need to pass in reqBody
try{
async.eachLimit(IdArr, 1, async id => {
const reqBody = await queryBuilder(id) // queryBuilder fn
q.push(reqBody)
})
} catch(err){return errorHandler(err)} //errorHandler fn
}
【问题讨论】:
标签: node.js async-await rate-limiting npm-request