根據此文檔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