结果是我不确定? 我使用contact Api,在服务中获取组件html上的数据,但是当我控制台结果时,我不确定。
element: any ;
constructor(private service: BlockService) { }
ngOnInit() {
this.service.getSource().subscribe(async data=> {
console.log(data)
return this.element = await data
})
console.log(this.element )
}
答案 0 :(得分:0)
我认为您不需要async
和await
关键字。该服务默认为异步
element: any;
constructor(private service: BlockService) {}
ngOnInit() {
this.service.getSource().subscribe(data => {
console.log(data); // will log the data
this.element = data;
});
console.log(this.element) // will log null/undefined.
}
编辑:
想想订阅会在运行时间的稍后发生。如果我们有一个以数字表示的时间轴,则代码的执行或多或少会像这样:
答案 1 :(得分:0)
尝试一下
element: any ;
constructor(private service: BlockService) { }
ngOnInit() {
this.service.getSource().subscribe(data=> {
console.log(data);
this.element = data;
someMethod();
})
}
someMethod(){
//here you can use this.element data
}
答案 2 :(得分:0)
您可以使用
element: any;
constructor(private service: BlockService) { }
async ngOnInit() {
this.element = await this.service.getSource().toPromise();
console.log(this.element)
}
答案 3 :(得分:0)
这不是观察者模式的工作原理,您必须订阅观察者数据流才能获取数据。您将无法不订阅就获取数据!
因此,订阅中没有使用async
或await
运算符!
在这种情况下,您可以在块范围之外使用变量,并在订阅观察者后分配值
export class MyComponent {
dataToPopulate: any = null;
constructor(private service: BlockService) {}
ngOnInit() {
this.service.subscribe(
data => dataToPopulate = {...data}, // for response 200 OK
error => console.log(error), // handle network error here {400 or 500 etc}
() => console.log(this.dataToPopulate) // complete callback hook
)
}
}
专业提示:取消订阅组件销毁钩子的订阅,以避免内存泄漏
还有另一种将Observable转换为Promise toPromise
并使用async
和await
运算符的方法。但是对于网络呼叫,您需要在这些语句周围使用try
catch
块来检测400
或500