ios并发会造成什么问题_Axios请求并发限制

本文探讨了在NodeJS中使用Axios进行并发请求时如何避免超过第三方API的QPS限制。通过理解Promise的执行机制,作者提出了一种通过Axios的拦截器(interceptors)机制来控制请求并发,确保请求按预设的QPS限制进行。文中提供了具体的代码示例,展示了如何创建拦截器以实现QPS控制,从而避免因并发过高导致的请求失败。
摘要由CSDN通过智能技术生成

标签

NodeJS并发请求,并行请求,QPS限制,Axios并发限制,Axios并发请求

背景

由于调用第三方服务的API的时候,第三方对请求的QPS会有一定的限制,如百度的人脸识别接口,QPS=5,腾讯地图开放平台的普通账号QPS=5,那么在使用的过程中如果每秒请求数超过此限制,接口就会返回报错。导致请求失败。因此,需要在本地实现QPS的控制,当把多个Axios的请求扔到Promise队列中的时候,不会导致请求超限的问题。

众所周知,Promise对象的运行并不是等调用Promise.all()的时候才会执行,而是在创建这个Promise的时候就已经开始执行了,所以从Promise这块去下手显然是无法实现的,需要在扔进Promise[]数组的这些Promise中去实现限制。

更多关于Promise并发等问题请自行学习了解,今天以Axios为例进行展开讨论。

开始

对于一个Axios请求来说返回一个Promise,这个大家都知道的哈~ 正常的Axios请求大概写成这样:

const AXIOS = require('axios')

async function AA() {

let res = await AXIOS({

method: 'GET',

url: 'https://www.baidu.com'

}).then(res => res.data)

console.log(res)

}

如果需要100个并发请求,则可以利用Promise.all()来实现:

const AXIOS = require('axios')

async function BB() {

// 定义一个Promise数组

let pms = []

for (let i = 0; i < 100; i++) {

// 往pms中扔进去AXIOS返回的Promise对象们

pms.push(AXIOS({

method: 'GET',

url: 'https://www.baidu.com'

}).then(res => res.data).catch(err => console.error(err)))

}

// 通过Promise.all等待pms中所有的Promise执行完毕并返回结果给pms数组

pms = await Promise.all(pms)

console.log(pms)

}

首先,如上面所说,这个请求的Promise是在创建的时候就已经开始执行了(甚至还没push到pms[]中的时候它就已经在执行请求了)。所以如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值