【问题标题】:Angular 5 chain service observables then return observable to componentAngular 5 链服务 observables 然后将 observable 返回到组件
【发布时间】:2018-09-14 12:52:57
【问题描述】:

我需要打两个休息电话。休息呼叫 2 取决于休息呼叫 1。我想在继续之前将每个结果存储在服务中。然后我想向调用 rest call 1 的组件返回一个 observable,以便组件在出现问题时可以订阅。

服务代码:

login(username: string, password: string): Observable<AuthAccess> {
// rest call 1
return this.getAuthClient()
  .flatMap(res => {
    this.client = res.body;
    // rest call 2
    return this.authenticate(username, password)
      .flatMap(access => {
        this.userAccess = access.body;
        return Observable.of(this.userAccess);
      });
  });

}

我可以正确链接它,但是调用它并订阅该调用的组件将显示未定义的响应。对此的任何帮助将不胜感激,因为我无法找到有关此确切用例的响应。

【问题讨论】:

    标签: angularjs rxjs observable


    【解决方案1】:

    Live working example。 使用 map 运算符(和 lettable 运算符 sintax),而不是链接一个新的 flatMap

    login(username: string, password: string): Observable<any> {
          // rest call 1
          return this.getAuthClient()
              .pipe(flatMap(res => {
                  this.client = res.body;
                  // rest call 2
                  return this.authenticate(username, password)
                      .pipe(map(access => {
                          this.userAccess = access.body;
                          return this.userAccess;
                      }));
              }));
      }
    

    【讨论】:

    • 谢谢。这很好用。我还可以通过将身份验证函数中的返回类型从 Observable> 更改为 Observable 来使其工作,这似乎不是一个好的解决方案,所以我非常感谢帮助。我投了赞成票,但它没有显示出因为我还不够酷。再次感谢。
    • 如果它有效,我很高兴。考虑使用 lettable 操作符(pipeable),你可以看一下这里,github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md
    猜你喜欢
    • 2018-12-18
    • 2018-07-08
    • 2017-04-17
    • 1970-01-01
    • 2018-11-23
    • 2018-09-04
    • 2016-02-13
    • 1970-01-01
    • 2018-08-22
    相关资源
    最近更新 更多