使用fetch而不是ajax,可以观察到redux
在使用fetch而不是ajax,可以观察到redux,ajax,redux,rxjs5,isomorphic-fetch-api,redux-observable,Ajax,Redux,Rxjs5,Isomorphic Fetch Api,Redux Observable,在redux observable中,是否可以使用而不是?(注意:RX.DOM.ajax来自RxJSv4,不适用于需要的redux observable。v5中的等效项是或从“RxJS/observable/ajax”导入{ajax};) 确实可以使用fetch()以及任何其他AJAX API;尽管有些人比其他人更容易适应 fetch()。大多数期望可观测的操作员可以按原样使用承诺(如mergeMap,switchMap等)。但通常,在将承诺传递到Epic的其余部分之前,您会希望将Rx操作符应用
redux observable
中,是否可以使用而不是?(注意:RX.DOM.ajax
来自RxJSv4,不适用于需要的redux observable
。v5中的等效项是或从“RxJS/observable/ajax”导入{ajax};
)
确实可以使用fetch()
以及任何其他AJAX API;尽管有些人比其他人更容易适应
fetch()。大多数期望可观测的操作员可以按原样使用承诺(如mergeMap
,switchMap
等)。但通常,在将承诺传递到Epic的其余部分之前,您会希望将Rx操作符应用于承诺,因此您通常会希望将承诺封装在可观察的范围内
您可以使用Observable.from(Promise)
下面是一个示例,我为一个用户获取,请求JSON响应,然后将承诺包装在一个可观察的文件中:
const-api={
fetchUser:id=>{
const request=fetch(`https://jsonplaceholder.typicode.com/users/${id}`)
.then(response=>response.json());
从(请求)可观察到的返回;
}
};
然后,您可以在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,其中有一个工作示例:
如果您可以控制API代码,那么最好使用Observable.ajax
(或任何其他基于Observable的ajax UTIL),因为承诺是无法取消的。(在撰写本文时)对@jayphelps做了一些小的调整,以便让代码为我工作。希望这有助于节省别人的时间
import { FETCH_USER } from './actions'
import { ofType } from 'redux-observable'
import { map, mergeMap } from 'rxjs/operators'
import { from } from 'rxjs'
const fetchUserEpic = action$ => {
return action$.pipe(
ofType(FETCH_USER),
mergeMap((action = { user: 'redux-observable' }) => {
const getRequest = (user) => {
const request = fetch(`https://api.github.com/users/${user}`)
.then(response => response.json())
return from(request)
}
return getRequest(action.user).pipe(
map(payload => ({ type: FETCH_USER_FULFILLED, payload }))
)
})
)
}
谢谢你的解释,杰!