【问题标题】:Returning out of a function the results of an observable从函数中返回 observable 的结果
【发布时间】:2021-11-10 00:18:47
【问题描述】:

我有一个函数,我需要返回一个可观察对象,因为它正在其他地方订阅,但因为我的函数正在异步发出请求,然后尝试将该数据作为可观察对象返回,所以它正在中断。

当前外观示例:

function userObservable() {
   const select = 'select * from users';

   this.db.query(select).subscribe(users => {
      // apply some logic and filter to users here

      // function just returns users as an observable
      return asObservable(users);
   });
}

function subscribeFunction() {
  userObservable().subscribe(users => {
     // do whatever
  });
}

但这基本上是破坏性的,因为它似乎在userObservable() 函数返回可观察对象之前尝试订阅subscribeFunction()。我在实现这一点的过程中遗漏了什么吗?我可以让它等待以确保第一个函数正确返回吗?

【问题讨论】:

    标签: rxjs observable


    【解决方案1】:

    订阅 observable 后,它只能返回订阅,不能再返回 observable

    但是,您可以使用 map/filter 等运算符来转换过滤您的用户对象并返回它

      return this.db.query(select).pipe(map(users => {
          // apply some logic and filter to users here
          // function just returns users as an observable
          users=user.filter(........)
          return users
       }));
    

    【讨论】:

    • 所以使用管道而不是订阅我仍然可以访问从初始可观察到的值?
    • 是的,rxjs 编程应该是这样的。在需要真正执行之前,我们通常不会订阅。我们先用不同的算子来组合变换数据。
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2013-01-05
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多