使用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 }))
            )
        })
    )
}

谢谢你的解释,杰!