Axios 在之前完成后循环请求
Axios requests in a loop after previous completes
我正在构建的应用程序涉及将视频帧发送到服务器进行处理。我正在使用 Axios 向服务器发送 POST 请求。我打算每秒发送大约 3-5 帧(POST 请求)。我需要在上一个请求完成后发送一个,因为下一个请求在请求正文中有数据,这取决于上一个请求的响应。
我试过 运行 它是一个循环,但那不行,因为下一个在上一个完成之前开始。在当前代码中,我有这样的东西 -
const fun = () => {
axios.post(url,data)
.then((res) => {
// process the response and modify data accordingly
// for the next request
})
.finally(() => fun());
};
这样我就可以实现一个接一个不断的要求了。但是我无法控制每秒发送的请求数。有什么办法可以限制每秒的请求数最多为 5?
附加信息:我将其用于 Web 应用程序,我需要将网络摄像头视频帧(作为数据 URI)发送到服务器进行图像处理,并将结果返回到客户在它之后。我希望限制请求的数量以减少我的应用程序消耗的互联网数据,因此希望每秒发送最多 5 个请求(最好是均匀分布)。如果 Axios POST 为此目的请求有更好的方法,请提出建议 :)
一个名为 Bottleneck 的神奇库可以在这里为您提供帮助。您可以使用以下代码将每秒请求数限制为您想要的任何数量:
const Bottleneck = require("bottleneck");
const axios = require('axios');
const limiter = new Bottleneck({
maxConcurrent: 1,
minTime: 200
});
for(let index = 0; index < 20; index++){
limiter.schedule(() => postFrame({some: 'data'}))
.then(result => {
console.log('Request response:', result)
})
.catch(err => {
console.log(err)
})
}
const postFrame = data => {
return new Promise((resolve, reject) => {
axios.post('https://httpstat.us/200', data)
.then(r => resolve(r.data))
.catch(e => reject(e))
});
}
通过操纵限制器
const limiter = new Bottleneck({
maxConcurrent: 1,
minTime: 200
});
您可以让您的 axios 请求在任何并发情况下以任何速率触发。
例如,要将每秒请求数限制为 3,您可以将 minTime
设置为 333
。按理说,如果要限制在每秒5个,就得设置成200
.
请参阅此处的瓶颈文档:https://www.npmjs.com/package/bottleneck
我正在构建的应用程序涉及将视频帧发送到服务器进行处理。我正在使用 Axios 向服务器发送 POST 请求。我打算每秒发送大约 3-5 帧(POST 请求)。我需要在上一个请求完成后发送一个,因为下一个请求在请求正文中有数据,这取决于上一个请求的响应。
我试过 运行 它是一个循环,但那不行,因为下一个在上一个完成之前开始。在当前代码中,我有这样的东西 -
const fun = () => {
axios.post(url,data)
.then((res) => {
// process the response and modify data accordingly
// for the next request
})
.finally(() => fun());
};
这样我就可以实现一个接一个不断的要求了。但是我无法控制每秒发送的请求数。有什么办法可以限制每秒的请求数最多为 5?
附加信息:我将其用于 Web 应用程序,我需要将网络摄像头视频帧(作为数据 URI)发送到服务器进行图像处理,并将结果返回到客户在它之后。我希望限制请求的数量以减少我的应用程序消耗的互联网数据,因此希望每秒发送最多 5 个请求(最好是均匀分布)。如果 Axios POST 为此目的请求有更好的方法,请提出建议 :)
一个名为 Bottleneck 的神奇库可以在这里为您提供帮助。您可以使用以下代码将每秒请求数限制为您想要的任何数量:
const Bottleneck = require("bottleneck");
const axios = require('axios');
const limiter = new Bottleneck({
maxConcurrent: 1,
minTime: 200
});
for(let index = 0; index < 20; index++){
limiter.schedule(() => postFrame({some: 'data'}))
.then(result => {
console.log('Request response:', result)
})
.catch(err => {
console.log(err)
})
}
const postFrame = data => {
return new Promise((resolve, reject) => {
axios.post('https://httpstat.us/200', data)
.then(r => resolve(r.data))
.catch(e => reject(e))
});
}
通过操纵限制器
const limiter = new Bottleneck({
maxConcurrent: 1,
minTime: 200
});
您可以让您的 axios 请求在任何并发情况下以任何速率触发。
例如,要将每秒请求数限制为 3,您可以将 minTime
设置为 333
。按理说,如果要限制在每秒5个,就得设置成200
.
请参阅此处的瓶颈文档:https://www.npmjs.com/package/bottleneck