当前位置: 首页 > 面试题库 >

使用fetch代替redux-observable的ajax

江佐
2023-03-14
问题内容

redux-observable是否有可能使用isomporphic取的,而不是Rx.DOM.ajax?


问题答案:

(注意:RX.DOM.ajax来自RxJS v4 ,并且不能与redux-observable需要RxJS
v5的版本

一起使用。v5中的等效项是Rx.Observable.ajaximport { ajax } from 'rxjs/observable/ajax';

确实可以使用fetch()以及其他任何AJAX API。虽然有些适应比其他容易!

fetch()API返回a Promise,RxJS v5对此具有 内置支持
。该预期可观察到的最能消耗运营商承诺按原样(如mergeMapswitchMap等)。但是通常您需要在将Rx运算符传递到Epic的其余部分之前将Rx运算符应用于Promise,因此,您通常需要将Promise包装在Observable中。

您可以使用以下方法将Promise封装为ObservableObservable.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(或任何其他基于Observable的AJAX
实用程序),因为无法取消Promises。(截至撰写本文时)



 类似资料:
  • 我想我根本不理解角2的rxjs可观测物的概念。 我创建了一个可观察属性,其他人可以订阅该属性并获取http调用结果的数据。 如果我想发出另一个http请求,可能需要修改一些参数以提取一些新数据,该怎么办?我是否要用这个新的可观察物替换可观察物?这是否破坏了我的订阅组件与前一个可观察组件的订阅?

  • Observable.of(1, 2, 3).subscribe( doSomething, reject, resolve); }); The forEach pattern is useful for a sequence of events you only expect to happen once. export class MyApp { private d

  • 基于 RxJS 5 的 Redux 中间件,通过组合和取消异步动作去创建副作用。

  • 但是,我们将经常从回调,promise,事件,集合或使用API上可用的许多运算符创建Observable。 这个基本示例概述了Http库常见例程如get,post,put和delete所有返回Observables,允许我们异步处理任何结果数据。 Observable Form Events import {FormControl, FormGroup, FormBuilder} from '@a

  • 问题内容: 我知道的指示: JPA持久性机制读取“ persistence.xml”文件,查找名为“ persistence-unit- name”的持久性单元,并基于该持久性单元构造EntityManagerFactory。 我的问题是,如何强制JPA 使用不同于“ persistence.xml”的文件 ?例如“ persistence-test.xml”。 问题答案: 尽管单个JPA提供程序

  • 问题内容: 现在,我有一个PHP文件,该文件执行MYSQL查询,然后计算像这样的行: 这可以正常工作,但是我试图将所有PHP文件更改为使用PDO。那么如何用PDO做到这一点呢? 问题答案: 要么 您也可以使用它来询问数据是否存在或被选择: 或使用您的变量: