如何解决for循环中的角度超时 更新:延迟每个请求更新:计算排放量
此刻,我尝试在Angular中构建数据导入。一切正常,但是我的后端仅允许大约70个请求。因此它遇到了错误。我的想法是在post请求中为Loop设置超时时间。这是解决这个问题的正确方法吗?如果是的话,该怎么做?找不到任何解决方案。 这是我目前的要求:
for( let x of this.data ){
this.http.post(url,x,{ headers: (reqHeader)}).toPromise().then((data: any) => { console.warn(this.data) })
}
解决方法
也许您正在寻找rate limiting?
...然后,将其与bufferTime和concatMap链接。 concatMap 运算符是我们强制1000ms延迟的地方:
const startTime = (new Date()).getTime();
const source = Observable.range(1,25)
.concatMap(val => Observable.of(val).delay(75));
source.bufferTime(1000,null,5)
.concatMap(buffer => Observable.of(buffer).delay(1000))
.timestamp()
.map(obj => {
obj.timestamp = obj.timestamp - startTime;
return obj;
})
.subscribe(obj => console.log(obj));
,
不确定后端的确切含义仅允许大约70个请求。但是,如果您希望一次控制并行请求的数量,则可以使用带有from
运算符的RxJS bufferCount
,forkJoin
和concatMap
函数。
-
尝试避免使用
toPromise()
。这是切换回熟悉的Promise范式的一种更简便的方法,但是在RxJS 7中已经deprecated,在RxJS 8中将消失。相反,请尝试订阅可观察对象。 -
对于受控的并行请求,请尝试以下操作
const reqs = this.data.map(item => this.http.post(url,item,{ headers: (reqHeader) }))
from(reqs).pipe(
bufferCount(6),// <-- adjust number of parallel requests here
concatMap(buffer => forkJoin(buffer))
).subscribe(
res => console.warn(res),err => console.log(err),() => console.log('complete')
);
更新:延迟每个请求
您可以放弃bufferCount
,而是单独切换到每个请求并使用明确的延迟。尝试以下
from(this.data).pipe(
concatMap(item => this.http.post(url,{ headers: (reqHeader) }).pipe(
delay(3000) // <-- wait 3 seconds b/n each request
))
).subscribe(
res => { },err => { }
);
更新:计算排放量
您可以引入变量(例如count
),然后使用map
运算符返回计数和响应。
尝试以下
someFunc() {
let count = 0;
from(this.data).pipe(
concatMap(item => this.http.post(url,{ headers: (reqHeader) }).pipe(
map(res => {
count++;
return {
count: count,response: res
}
}),delay(3000) // <-- wait 3 seconds b/n each request
))
).subscribe(
res => {
console.log(res.count); // <-- the count of the emission
console.log(res.response); // <-- the response from `this.http.post()`
},err => { }
);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。