Soj*_*jye 10 asynchronous http chaining angular
我有一个组件,首先需要调用POST的服务.然后在同一个组件中我想等到POST完成后,调用另一个获取数据的服务.
如何进行GET调用等待POST调用完成?
在new-version.component.ts中:
private createNewVersion(value) {
...
// create new version, then call on all available versions
// POST call
this._newVersionService.createNewVersion(vnr);
// GET call
this._versionService.getAvailableVersions();
...
}
Run Code Online (Sandbox Code Playgroud)
在new-version.service.ts中:
export class NewVersionService {
response$: Subject<any>;
constructor(private _http: Http) {
this.response$ = new BehaviorSubject<any>(null);
}
public createNewVersion(versionNr) {
this._http.post('http://localhost:8080/services/' + versionNr, null, {
method: 'POST',
})
.subscribe(response => {
this.response$.next(response.status);
},
error => console.error(error));
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
当一个调用返回一个Promise
链调用时
someFunction() {
return returnsPromise()
.then(result => doSomethingNext())
.then(result => doSomethingAfterThat());
}
Run Code Online (Sandbox Code Playgroud)
确保你有一个return
返回该Promise
链的那个,这样调用者someFunc()
也有机会在doSomethingAfterThat()
完成后执行额外的工作.
当一个调用返回一个Observable
然后使用complete
回调
someFunction() {
return returnsObservable()
.subscribe(
event => doForEachEvent(),
error => handleError(),
() => doSomethingNext()
.then(result => doSomethingAfterThat());
}
Run Code Online (Sandbox Code Playgroud)
doSomethingNext()
在最后一个之后执行,event
并doSomethingAfterThat()
再次链接then()
以显示如何混合observable和promise.doSomething()
.
您可以这样做:将 createNewVersion 更改为:
public createNewVersion(versionNr) {
return this._http.post('http://localhost:8080/nod_inspection_plugin/services/' + versionNr, null, {
method: 'POST',
});
}
Run Code Online (Sandbox Code Playgroud)
然后在你的通话中:
this._newVersionService.createNewVersion(vnr).subscribe(response=> {
this._versionService.getAvailableVersions();
}, error => console.error(error));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16853 次 |
最近记录: |