我有一个rxjs.observable
(rxjs版本6.2.1),它返回urls
我需要发出GET
个请求。
var subscription = urlObservable$.subscribe(
function (url) {
console.log('new URL: ' + url);
processURL(url)
},
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); }
);
对于每个url
,我需要通过函数processURL(url)
发出请求。根据反应原理,正确的方法是处理所有这些传入的URL并逐个发出请求,而不是在subscribe
发出数据后立即触发所有这些请求?请注意,在这种情况下,可观察的urlObservable$
将比返回的url
所需的请求更快地返回数据。
processURL
可以返回promise
。
感谢。
答案 0 :(得分:2)
如果urlObservable$
仅发出字符串,则只需使用始终等待上一个Observable完成的concatMap
:
urlObservable$
.pipe(
concatMap(url => processURL(url)),
)
.subscribe(...);
即使processURL
返回Promise,这也会有用。