异步 HTTP 请求的顺序
Order of asynchronous HTTP requests
基本上我有一个包含元素列表的组件和一个详细信息组件,您可以在其中编辑或添加新元素。
在我通过 http 服务(this.myservice 基于文档 https://angular.io/docs/ts/latest/tutorial/toh-pt6.html 中的 hero.service.ts)向我的服务器添加元素之后。然后我直接跳回element组件列表
我使用Zone,所以会调用ngOnInit。
问题是元素列表经常没有用新元素更新。我想异步 HTTP 请求的顺序搞混了。
好的解决方案是什么样的?
export class DetailElemComp {
this.myService.addElem(this.elem)
.subscribe(
error => this.errorMessage = <any>error);
this.zone.run(() => this.router.navigate(['ListComponent']));
}
export class ListOfElemComp {
ngOnInit() {
this.myService.getElems()
.subscribe(
elems => this.elems = elems,
error => this.errorMessage = <any>error);
}
}
嗯,就像你说的,这是一个异步请求。因此,如果您想在请求完成后执行某些操作,我建议将该逻辑移动到 subscribe
函数的 onCompleted
回调 lambda 中,如下所示:
export class DetailElemComp {
this.myService.addElem(this.elem)
.subscribe(
data => null,
error => this.errorMessage = <any>error,
() => this.zone.run(() => this.router.navigate(['ListComponent']))
);
}
subscribe
调用下方的代码将在 subscribe
方法内部的回调执行之前 运行。
基本上我有一个包含元素列表的组件和一个详细信息组件,您可以在其中编辑或添加新元素。
在我通过 http 服务(this.myservice 基于文档 https://angular.io/docs/ts/latest/tutorial/toh-pt6.html 中的 hero.service.ts)向我的服务器添加元素之后。然后我直接跳回element组件列表
我使用Zone,所以会调用ngOnInit。
问题是元素列表经常没有用新元素更新。我想异步 HTTP 请求的顺序搞混了。
好的解决方案是什么样的?
export class DetailElemComp {
this.myService.addElem(this.elem)
.subscribe(
error => this.errorMessage = <any>error);
this.zone.run(() => this.router.navigate(['ListComponent']));
}
export class ListOfElemComp {
ngOnInit() {
this.myService.getElems()
.subscribe(
elems => this.elems = elems,
error => this.errorMessage = <any>error);
}
}
嗯,就像你说的,这是一个异步请求。因此,如果您想在请求完成后执行某些操作,我建议将该逻辑移动到 subscribe
函数的 onCompleted
回调 lambda 中,如下所示:
export class DetailElemComp {
this.myService.addElem(this.elem)
.subscribe(
data => null,
error => this.errorMessage = <any>error,
() => this.zone.run(() => this.router.navigate(['ListComponent']))
);
}
subscribe
调用下方的代码将在 subscribe
方法内部的回调执行之前 运行。