Observables 和响应数据类型

Posted

技术标签:

【中文标题】Observables 和响应数据类型【英文标题】:Observables and response data typings 【发布时间】:2017-12-28 04:54:43 【问题描述】:

我正在尝试掌握 Observables,但有时会迷失方向。

假设我们订阅getData异步获取json数据:

this.getData(id)
    .subscribe(res => 
        console.log(data.items[0])
        // more data processing
    )

这可行,但在 .subscribe 中处理响应数据看起来并不令人满意。将响应分配给 var 似乎是一种方法:

let data;
this.getData(id)
        .subscribe(res => data = res)
console.log(data.items[0])
// more data processing

但在这种情况下,我们会收到错误,因为 var 'data' 没有初始类型。

TypeError:无法读取未定义的属性“项目”

为 json 响应创建接口听起来很愚蠢。我错过了什么?

此外,创建回调函数似乎也是多余的,因为它需要 2 个函数来完成本应是单个函数的工作。

【问题讨论】:

【参考方案1】:

因为 var 'data' 没有初始类型。

没有。错误是因为 dataundefined。 TypeScript 足够聪明,可以看到 data 没有初始化 https://basarat.gitbooks.io/typescript/content/docs/javascript/recap.html。代码执行顺序如下:

let data; // 1 
this.getData(id)
        .subscribe(res => data = res) // 3!
console.log(data.items[0]) // 2

更多

请在 JavaScript / TypeScript 中查找异步编程。基本上,您只能在调用 subscribe 时使用数据。

【讨论】:

好的,我明白了。如果有意义的话,我应该如何构建它,然后我需要处理来自多个可观察对象的数据..? 你可以使用这些操作:github.com/ReactiveX/RxJava/wiki/Combining-Observables 那么使用 observables 而不仅仅是使用匿名函数的回调有什么好处呢? func(_, )

以上是关于Observables 和响应数据类型的主要内容,如果未能解决你的问题,请参考以下文章

将 Typescript 类型同步到 Firebase Object Observables 而不会丢失功能等

如何在 Observables 上设置正确的类型?

RxSwift 合并不同类型的 Observables

RxSwift - 来自 Singleton 的不同类型的队列 observables

Knockoutjs官网翻译系列 Observable 数组

RxSwift - 递归 Observables?