fromFetch

2020-10-13 10:16 更新

使用 Fetch API 来 发出 HTTP 请求。

fromFetch<T>(input: string | Request, initWithSelector: RequestInit & { selector?: (response: Response) => any; } = {}): Observable<Response | T>

参量

输入 您想获取的资源。 可以是网址或请求对象。
initWithSelector 可选的。 默认值为 {}。         类型: RequestInit & { selector?: (response: Response) => any; }

returns

Observable<Response | T>:一个 Observable,在订阅时使用本机执行 HTTP 请求 fetch 功能。 将 Subscription与绑定在一起以 AbortController进行抓取。

描述

警告 部分提取API仍处于试验阶段。 AbortController是 才能正常运行并适当使用取消功能。

会自动设置一个内部 AbortController 以便 拆除内部 fetch在订阅取消时 。

如果 a signal通过 提供 init参数 ,则其行为将与通常 fetch。 如果提供的内容 signal中止, 的错误 fetch通常会拒绝 在那种情况下,将被视为可观察到的错误。

基本用途

  1. import { of } from 'rxjs';
  2. import { fromFetch } from 'rxjs/fetch';
  3. import { switchMap, catchError } from 'rxjs/operators';
  4. const data$ = fromFetch('https://api.github.com/users?per_page=5').pipe(
  5. switchMap(response => {
  6. if (response.ok) {
  7. // OK return data
  8. return response.json();
  9. } else {
  10. // Server is returning a status requiring the client to try something else.
  11. return of({ error: true, message: `Error ${response.status}` });
  12. }
  13. }),
  14. catchError(err => {
  15. // Network or other error, handle appropriately
  16. console.error(err);
  17. return of({ error: true, message: err.message })
  18. })
  19. );
  20. data$.subscribe({
  21. next: result => console.log(result),
  22. complete: () => console.log('done')
  23. });

与分块传输编码一起使用

对于使用 HTTP 响应 分块传输编码的 , 返回的诺言 fetch将在响应的标头被解析后立即解析 收到。

这意味着 fromFetch可观察者将发出 Response-并将 然后完成-在收到尸体之前。 当其中一种方法 Response-如 text()json()-被调用,返回的诺言将不会 解决,直到收到全身。 取消订阅任何可观察到的 使用 promise 作为可观察输入的操作不会中止请求。

为了便于中止使用分块传输编码的响应的检索, 一个 selector可以通过指定 init参数:

  1. import { of } from 'rxjs';
  2. import { fromFetch } from 'rxjs/fetch';
  3. const data$ = fromFetch('https://api.github.com/users?per_page=5', {
  4. selector: response => response.json()
  5. });
  6. data$.subscribe({
  7. next: result => console.log(result),
  8. complete: () => console.log('done')
  9. });
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号