在redux-observable
中可以使用isomporphic-fetch而不是Rx.DOM.ajax?使用fetch而不是ajax來減少可觀察到的
10
A
回答
35
(注:RX.DOM.ajax
是RxJS V4,並且不與redux-observable
需要RxJS v5工作,V5相對應的是Rx.Observable.ajax
或import { ajax } from 'rxjs/observable/ajax';
。)
這確實是可以使用fetch()
以及任何其他AJAX API;儘管有些適應比別人更容易!
的fetch()
API返回一個Promise
,其RxJS V5具有內置的支持。大多數期望可觀察的操作員可以按原樣使用Promise(如mergeMap
,switchMap
等)。但是,在將它傳遞給Epic的其餘部分之前,經常需要將Rx運算符應用於Promise,因此您經常需要將Promise包裝在Observable中。
你可以用一個承諾到可觀察到的與Observable.from(promise)
此處,我取了一個用戶,請求JSON響應的例子,然後包裹承諾可觀察:
const api = {
fetchUser: id => {
const request = fetch(`https://jsonplaceholder.typicode.com/users/${id}`)
.then(response => response.json());
return Observable.from(request);
}
};
然後你可以在Epic中使用它並應用任何你想要的操作符:
const fetchUserEpic = action$ =>
action$.ofType(FETCH_USER)
.mergeMap(action =>
api.fetchUser(action.payload) // This returns our Observable wrapping the Promise
.map(payload => ({ type: FETCH_USER_FULFILLED, payload }))
);
這裏有一個JSBin這個工作示例:https://jsbin.com/fuwaguk/edit?js,output
如果你有過API代碼控制,理想情況下,你會用Observable.ajax
(或任何其他基於可觀察-utils的AJAX),因爲承諾無法取消。 (截止撰寫時)
相關問題
- 1. 通過添加觀察值來減少數據幀的行數
- 2. 使用可觀察
- 3. 過濾器可觀察到的由可觀察到的
- 4. 減少dom元素,我可以使用span而不是div嗎?
- 5. 可觀察到流
- 6. RxJS打字稿:房產「減少」的類型不存在「可觀察<number>」
- 7. 使用Ember的「觀察(..)」來觀察一些陣列的修改
- 8. knockoutjs - 可觀察到的可觀察值的對象的observableArray
- 9. 可觀察HTTP地圖的樣子,而不是實際的
- 10. RxJs使用WebSocket可觀察
- 11. 如何使用可觀察過濾可觀察對象
- 12. Angular2綁定可觀察的功能,而不是屬性
- 13. 可觀察 - 將2個承諾轉換爲可觀察到的
- 14. 可觀察到的序列
- 15. 可觀察到的轉換
- 16. 當觀察者的觀察者的壽命長於可觀察到的
- 17. 觀察員可以觀察多個可觀察物嗎?
- 18. 創建缺少的觀察
- 19. 可觀察<{}>不可分配到類型可觀察<SomeType[]>
- 20. 使可觀察陣列的所有項目可觀察
- 21. Java觀察者和可觀察的
- 22. 是否有RX擴展來創建可觀察到的從另一個觀察到的,只有捕獲異常
- 23. 使可觀測陣可觀察
- 24. Angular 2可觀察問題重複,而不是更新結果
- 25. 爲什麼要改變property listener而不是可觀察
- 26. 誰是觀察者,誰是可觀察者?
- 27. RxJS:鏈式觀察量不使用相同的根可觀察值
- 28. 可觀察得到加倍
- 29. Angular Http得到可觀察
- 30. 使用RxCpp構造觀察者/可觀察模式
謝謝你,傑伊,爲解釋! – zatziky