我在我的 Nodejs 项目中使用Request包以及Node V.8.x中引入的Async/ Await 函数来使用 3rd 方 API,在遇到 API 提供者的限制之前一切都很好;谁有每秒 10 个并发请求的限制。
我尝试了许多可用的 NPM 包,比如 rate-limiter 等,但是最近发现了一篇与我的问题相关的文章,它向我介绍了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
}