Javascript 如何在rxjs中优化两台服务器之间网络请求的顺序处理
我想连续向Web服务器“A”发出数百个API请求,一个接一个地执行,以避免阻塞服务器。 对于来自此服务器的每个响应,我需要将此响应发送到Web服务器“B”进行处理,但条件是我不能一次向服务器B发送多个请求,但一次只能发送一个请求 注意:我不想在Web服务器B的请求仍处于挂起状态时延迟对Web服务器A的请求 我应该如何更改代码以满足这些条件?(我当前的代码忽略了不同时向Web服务器B发送多个请求的条件)Javascript 如何在rxjs中优化两台服务器之间网络请求的顺序处理,javascript,rxjs,Javascript,Rxjs,我想连续向Web服务器“A”发出数百个API请求,一个接一个地执行,以避免阻塞服务器。 对于来自此服务器的每个响应,我需要将此响应发送到Web服务器“B”进行处理,但条件是我不能一次向服务器B发送多个请求,但一次只能发送一个请求 注意:我不想在Web服务器B的请求仍处于挂起状态时延迟对Web服务器A的请求 我应该如何更改代码以满足这些条件?(我当前的代码忽略了不同时向Web服务器B发送多个请求的条件) 这里可以有一种方法: from(requestsToA) .烟斗( //按顺序发送所有请求 c
这里可以有一种方法:
from(requestsToA)
.烟斗(
//按顺序发送所有请求
concatAll(),
//将每个'aResponse'发送到'B',仍然按顺序发送
concatMap(aResponse=>service.sendResponseObserver(aResponse))
)
如果
aResponse2
在为aResponse1
创建的内部可观察对象完成之前到达,它将被添加到队列中,并在可观察对象完成时从队列中删除,因此您可以确保每个请求一次发送一次。您真了不起
import { from, of, defer } from 'rxjs';
import { concatAll } from 'rxjs/operators'
const source = defer(() => {
const webserverA_req1 = defer(() => {
return new Promise(resolve => {
console.log('webserver A request #1 run');
setTimeout(() => {
resolve('a')
}, 500)
});
});
const webserverA_req2 = defer(() => {
return new Promise(resolve => {
console.log('webserver A request #2 run');
setTimeout(() => {
resolve('b')
}, 2500)
});
});
const webserverA_req3 = defer(() => {
return new Promise(resolve => {
console.log('webserver A request #3 run');
setTimeout(() => {
resolve('c')
}, 3000)
})
});
return from([
webserverA_req1,
webserverA_req2,
webserverA_req3
])
.pipe(
concatAll((msg) => of(msg))
)
});
const webserverB_req = (x) => {
return new Promise(resolve => {
console.log('webserver B request run');
setTimeout(() => {
// console.log(x);
resolve(x + ' processed')
}, 9000)
})
};
source.subscribe(
x => {
webserverB_req(x);
},
err => console.log(err),
() => console.log('complete')
)