waw*_*wka 25

当fetch调用返回包含响应对象的另一个promise时,我会创建自己的observable:

import { Observable } from 'rxjs';

const data$ = Observable.create(observer => {
  fetch('http://server.com')
    .then(response => response.json()) // or text() or blob() etc.
    .then(data => {
      observer.next(data);
      observer.complete();
    })
    .catch(err => observer.error(err));
});

data$.subscribe(data => /*do something with data*/);
Run Code Online (Sandbox Code Playgroud)

  • 真的不明白为什么这是低估了.我认为它实际上是一个更可靠的解决方案,接受的答案.`Observable.fromPromise(fetch(..))`会立即触发请求,而上面的命令会在`.subscribe()`之后有效启动它. (4认同)
  • Observable.create() 已弃用。相反,使用:`const data$ = new Observable(observer => {...})` (2认同)

kit*_*kit 11

看看这篇文章

var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));
result.subscribe(x => console.log(x), e => console.error(e));
Run Code Online (Sandbox Code Playgroud)


小智 7

我正在使用 rxjs 6.5.3。我使用下面的示例将 Fetch API 响应转换为 RxJS Observable。

const { from } = rxjs;
const { map, switchMap } = rxjs.operators


const observable = from(fetch('data/user.json')).pipe(
    switchMap(response => response.json())
)

observable.subscribe(function(result){
    console.log('result', result);
});
Run Code Online (Sandbox Code Playgroud)

您还可以使用fromFetch的 rxjs。但 fetch API 仍处于实验阶段。


Sho*_*ura 5

I'm using rxjs@6.

The operator that accepts observables(like flatMap, switchMap, etc...) can also accept promise. it's very simple as follows.

somethingObservable.pipe(
    flatMap(() => fetch('http://some.api.com/post/1')),
    subscribe((response) => {
        console.log(response);
    }),
)
Run Code Online (Sandbox Code Playgroud)