[英]How do I send multiple http requests with rx.js?
我正在尝试rx.js
,我正在尝试发出多个http
请求。 这是我设置为发出http
请求的observable
。
function httpGet(url) {
return Observable.create(function forEach(observer) {
var cancelled = false;
axios.get(url).then(function(res) {
if(!cancelled) {
observer.onNext(res);
observer.onCompleted();
}
});
return function dispose() {
cancelled = true;
}
})
}
我正在尝试发出多个http
请求,但我的结果是更多的Observable
。 这是subscribe
:
var array = ['http://localhost:4444/text/88', 'http://localhost:4444/other/77'];
var source = Rx.Observable.fromArray(array).map(httpGet);
var subscription = source.subscribe(
function (x) {
console.log(x);
},
function (err) {
console.log('Error: ' + err);
},
function () {
console.log('Completed');
});
这是我的结果。
AnonymousObservable { source: undefined, __subscribe: [Function: forEach] }
AnonymousObservable { source: undefined, __subscribe: [Function: forEach] }
Completed
我知道我正在获得Observable
,如果我forEach
通过它们,那么我会得到结果,但我错过了将其转换为data
而不是Observable
的正确方法。 我究竟做错了什么?
这应该够了吧:
var array = ['http://localhost:4444/text/88', 'http://localhost:4444/other/77'];
var source = Rx.Observable.fromArray(array).concatMap(httpGet);
function httpGet(url) {
return axios.get(url);
}
var subscription = source.subscribe(
function (x) {
console.log(x);
},
function (err) {
console.log('Error: ' + err);
},
function () {
console.log('Completed');
});
一些解释:
Converting events or asynchronous patterns to observable sequences, or between Arrays and observable sequences.
subscribe
函数。 map
运算符产生一系列promises,但实际上你将使用concatMap
运算符以与数组值相同的顺序输出promise promise值。 concatMap
可以将一个observable,一个数组/可迭代或一个promise作为其参数,并将输出包含在它返回的observable中的那些对象的值序列。 因此,您没有一系列的承诺,而是通过承诺(即您获取的html内容)解决了一系列值。 如果您对保持源的初始排序不感兴趣,还可以使用flatMap
运算符。 参看 https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/concatmap.md和https://github.com/Reactive-Extensions/RxJS/blob/master/doc/ API /型芯/运营商/ selectmany.md 因此,这基本上是一般过程,您采用源序列,通过明智地选择运算符将其转换为您选择的序列,然后使用您的观察函数逐个处理这些值。 另外,请注意,promise类似于observable,并且一些(大多数?) Rxjs
运算符会将它们视为这样,因此您通常不必使用then
来获取已解析的值。
最后, Rx.Observable.fromArray
似乎不赞成使用Rx.Observable.from
:cf。 https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/fromarray.md
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.