我试图抓住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'数据'没有初始类型。
TypeError:无法读取属性' item'未定义的
为json响应创建一个接口听起来很傻。我错过了什么?
此外,创建回调函数似乎也是多余的,因为它将需要2个函数来完成应该是单个函数的工作。
答案 0 :(得分:0)
因为var'数据'没有初始类型。
没有。该错误是因为数据是undefined
。 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
时才能使用数据。