Gar*_*ice 3 asynchronous node.js axios
我目前GET使用 Promise 向 API发送请求 200 次。毫不奇怪,在如此短的时间内允许最大连接数。
我axios用来做这个:
const memberPromises = members.map(member => axios.get(`players/%23${member.tag}`))
axios.all().then().catch() // etc
Run Code Online (Sandbox Code Playgroud)
..其中成员最多可以包含 200 个元素。
似乎没有办法速率控制本机内的这些请求axios,但我会怎么用async的(或者如果有更好的另一个库)queue方法与concurrent参数限制并发请求数?
这个怎么样?
将成员映射到承诺,在超时后解决承诺
let RATE_LIMIT_BASE = 100; //100ms separation
let promises = members.map((member, idx) => {
return new Promise((resolve, reject) => {
setTimeout(
() =>
axios
.get(`players/%23${member.tag}`)
.then(res => resolve(res))
.catch(err => reject(err)),
RATE_LIMIT_BASE * idx
);
});
});
Promise.all(promises).then().catch(); // etc;
Run Code Online (Sandbox Code Playgroud)
在评论中,正如 marvel308 所说,
在某些情况下这可能会失败,因为 setTimeout 只是保证代码将在调用 setTimeout 后至少执行 100 毫秒,它们仍然可以在事件队列中排队,以防某些 CPU 密集型任务阻塞调用堆栈
感谢 marvel308 的建议
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |