当前位置: 首页 > 知识库问答 >
问题:

如何从内部有可观察订阅的功能返回价值?

潘泳
2023-03-14

我不知道如何从Observable中提取值,由Observable所在的函数返回。我只需要从中返回一个值,其他什么都不需要。

最新版本有效吗

function getValueFromObservable() {
    this.store.subscribe(
        (data:any) => {
            console.log(data)
        }
    )
}
getValueFromObservable()

我需要它工作,函数返回值,然后:

function getValueFromObservable() {
    this.store.subscribe(
        (data:any) => {
            return data
        }
    )
}
console.log(getValueFromObservable())

我做错了什么?

共有3个答案

逄念
2023-03-14

如果您想预订阅将返回的同一个可观察对象,只需使用

.do():

function getValueFromObservable() {
    return this.store.do(
        (data:any) => {
            console.log("Line 1: " +data);
        }
    );
}

getValueFromObservable().subscribe(
        (data:any) => {
            console.log("Line 2: " +data)
        }
    );
戚学
2023-03-14

使用Observable

在组件中,你必须声明类成员,它将容纳一个对象(你将在组件中使用的东西)

export class MyComponent {
  name: string = "";
}

然后一个服务将返回一个可观察的

getValueFromObservable():Observable<string> {
    return this.store.map(res => res.json());
}

组件应做好准备,以便能够从中检索值:

OnInit(){
  this.yourServiceName.getValueFromObservable()
    .subscribe(res => this.name = res.name)
}

您必须将可观察值中的值分配给变量:

您的模板将使用变量name

<div> {{ name }} </div>

另一种使用可观察的方法是通过async管道http://briantroncone.com/?p=623

注意:如果不是您要问的问题,请更新您的问题并提供更多详细信息

景嘉实
2023-03-14

编辑:更新代码,以反映RXJS最新版本中对管道工作方式所做的更改。所有操作符(以我的示例为例)现在都被包装到pipe()操作符中。

我意识到这个问题是很久以前的事了,现在你肯定已经有了一个合适的解决方案,但是对于任何想要解决这个问题的人,我建议你promise保持异步模式

更详细的版本将创建一个新的promise:

function getValueFromObservable() {
    return new Promise(resolve=>{
        this.store.pipe(
           take(1) //useful if you need the data once and don't want to manually cancel the subscription again
         )
         .subscribe(
            (data:any) => {
                console.log(data);
                resolve(data);
         })
    })
}

在接收端,您将“等待”promise以如下方式解决:

getValueFromObservable()
   .then((data:any)=>{
   //... continue with anything depending on "data" after the Promise has resolved
})

更精简的解决方案是使用RxJS'. toPromise()代替:

function getValueFromObservable() {
    return this.store.pipe(take(1))
       .toPromise()   
}

接收方当然保持与上述相同。

 类似资料:
  • 我必须从两个订阅服务器获取数据,但我总是获取第一个订阅服务器的数据。 我有一个数据共享服务: 在离开搜索组件之前,我调用update方法。 现在,我在results组件上。我得到的共享数据如下: 我的问题是:我需要共享数据来订阅另一个可观察的数据。首先,我构造了一个物体乘坐,在我调用搜索方法之后 问题是我总是从数据服务获取数据,而不是从api调用。api工作导致我在存储中拦截结果,而不是在组件中。

  • 我想调用一个函数(同步),然后使用它的返回值作为初始发射(随后链接一些其他运算符上的结果可观察)。 我想在订阅期间调用这个函数,所以我不能只使用

  • 本文向大家介绍system.reactive 订阅/取消订阅可观察对象(IDisposable),包括了system.reactive 订阅/取消订阅可观察对象(IDisposable)的使用技巧和注意事项,需要的朋友参考一下 示例 订阅返回IDisposable: 当您准备取消订阅时,只需处置订阅即可:            

  • 我有一个外部服务(ExternalDummyService),在其中注册回调。我想从该回调创建一个可观察的对象,并订阅多个异步进程。 pyfiddle中的完整代码:https://pyfiddle.io/fiddle/da1e1d53-2e34-4742-a0b9-07838f2c13df*请注意,在pyfiddle版本中,“睡眠”被替换为“范围(10000)内的i: foo=i”,因为睡眠无法正

  • 我试图理解可观察对象是如何执行的,但似乎无法让这个简单的代码正常工作。 不应该是你好。订阅()执行?

  • 在ngOnDestroy方法中,我取消订阅一次已订阅的observable,否则代码会被多次执行... 现在我想把它放在路由器解析类中,但没有ngOnDestroy--当然--只有一个NavigationEnd事件,我可以再次订阅。 这意味着我订阅了一个NavigationStart事件(当我离开路由时发生),以便取消订阅另一个订阅,即路由参数更改订阅哈哈哈... 我想这不是一个好办法,但谷歌什么