typescript - 如何从内部具有 Observable 订阅的函数返回值?

标签 typescript angular rxjs rxjs5

我不知道如何从存在 Observable 的函数中提取要返回的值。我只需要从中返回一个值,不需要其他任何东西。

当前可用的版本

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

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

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

我在这里做错了什么?

最佳答案

编辑:更新代码以反射(reflect)在最新版本的 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()   
}

接收方当然和上面一样。

关于typescript - 如何从内部具有 Observable 订阅的函数返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38291783/

相关文章:

javascript - RxJS:如果请求很慢则显示加载

javascript - 使用 Map 的 Angular 6 HttpClient

reactjs - react typescript : exclude property in higher order component

angular - 如何在几秒钟后更改 div 的背景颜色?

javascript - Webpack 5 模块联合 - 远程模块中的 Hook - 不起作用

angular - 如何在 Angular4/Ionic 中使用 *ngFor 时从列表中获取单击的项目详细信息

css - 如果文本溢出屏幕,如何动态更改使用 css 显示的文本的位置

javascript - 如何防止 Element.focus() 在 contenteditable div 中更改光标位置?

angular - 在 Azure 中使用路由托管 Angular2 应用程序

angular - 如何在等待响应时取消 http.post()?