根据此文档https://xgrommx.github.io/rx-book/content/observable/observable_instance_methods/index.html,Observable方法和Observable实例方法之间存在主要分离。我知道Observable方法总是在Observable实例方法之前调用。希望这是真的。但是我们可以使用什么顺序来组合/混合Observable实例方法?可以使用RxJS操作符的顺序
我有什么要解决的问题是为什么两个类似的Observables的结果是不一样的。
第一个:
let getRequestJson = this.http.get(this.config.apiUrl + '/users', new RequestOptions({params: this.params}))
.map((response: Response) => response.json());
console.log(getRequestJson);
let doThroughTheJsonData = getRequestJson.do(data => {
this.count = data.count;
this.loading = false;
this.currentPage = page;
});
console.log(doThroughTheJsonData);
this.asyncUsers = doThroughTheJsonData.map(data => {
return data.user;
});
console.log(this.asyncUsers);
输出:
Observable {_isScalar: false, source: Observable, operator: MapOperator}
Observable {_isScalar: false, source: Observable, operator: DoOperator}
Observable {_isScalar: false, source: Observable, operator: MapOperator}
二之一:
this.params.page = page;
let options = new RequestOptions({ params: this.params });
let getRequest = this.http.get(this.config.apiUrl + '/users', options);
console.log(getRequest);
let doThroughTheData = getRequest.do(data => {
this.count = data.json().count;
this.loading = false;
this.currentPage = page;
});
console.log(doThroughTheData);
this.asyncUsers = doThroughTheData.map((response: Response) => response.json().users);
console.log(this.asyncUsers);
输出:
Observable {_isScalar: false, source: Observable, operator: CatchOperator}
Observable {_isScalar: false, source: Observable, operator: DoOperator}
Observable {_isScalar: false, source: Observable, operator: MapOperator}
最后,我在asyncUsers中收到的内容看起来像不同的Observable,虽然应该是相同的。 在第一个我做 1. MAP上的数据转换为json格式的数据。 2.然后可观察到的DO从json数据获取一些数据 3.我再次使用MAP从json数据获取用户数据。
在第二个我做 1.第一DO和里面我第一次传输的响应数据JSON和我得到了我需要的 2.然后映射转型为JSON并获得唯一从JSON数据的用户数据。
是这个问题可观察的具体,它是关系到方法map-do-map/do-map的顺序,或者是明确的typescript错误。
感谢您的链接。我搜索了很好的链接,但没有成功。是的,我使用Angular,这就是为什么我直接使用页面中的observable。我的理解是,问题不在于调用方法的顺序,并且在仅涉及Observable实例方法时没有特定的顺序。所以我会在观察者内部进一步搜索。谢谢。我使用了方法DO,因为我需要Web Service返回的部分数据,但是在这种情况下,asyncUsers的页面的可观察性只是用户数组。所以我只需要数组之前的数据 – makkasi