有没有办法在编写新的Observable时结合使用observer.next和observer.complete?

时间:2017-04-17 17:15:20

标签: angular rxjs observable

例如,我在创建新的Observable时使用了以下模板:

myFunction(): Observable<any> {
  return new Observable((observer) => {
     // do things, like make HTTP calls, cache, etc.
     // generate valueToReturn
     observer.next(valueToReturn);
     observer.complete();
  });
}

有更简洁的方式来写这个吗?我知道Observable.of,但只有当你需要一个没有复杂动作的短Observable时才会这样。

我知道你可以回复一个HTTP电话。

2 个答案:

答案 0 :(得分:2)

如果你指的是将这两行合并,那么:不,没有这样的东西。

但是作为一个旁注:你用你的评论排列的流似乎是一个非常普通的流:Http - &gt;地图值 - &gt;返回值,不应该要求Observable.create - 在多个大型项目中使用RxJS我只能回想起需要Observable.create的2个案例,我们能够通过链接内置的rxjs来处理其他所有事情-operators。

这是一个非常简单的例子:

myFunction(): Observable<any> {
    return this.http.get(someAddress)
        .map(data => data.json())
        .map(toClientSideUsableData)
        .do(data => this.myService.cache = data)
        .do(raiseAlertIfInvalid);
}

答案 1 :(得分:0)

Angular 2 http默认情况下会这样做。查看Angular源代码xhr_backend.js

       if (response.ok) {
          responseObserver.next(response);
          // TODO(gdi2290): defer complete if array buffer until done
          responseObserver.complete();
          return;
        }