我有一个组件,它首先需要调用一个 POST 服务。然后在同一个组件中,我想等到 POST 完成,调用另一个获取数据的服务。
如何让 GET 调用等待 POST 调用完成?
在新版本.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();
...
}
在 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));
}
谢谢!
最佳答案
当一个调用返回一个 Promise
时,将调用链接到
someFunction() {
return returnsPromise()
.then(result => doSomethingNext())
.then(result => doSomethingAfterThat());
}
确保您有一个返回该链的 Promise
的 return
,这样 someFunc()
的调用者也有机会额外计时在 doSomethingAfterThat()
完成后执行的工作。
当调用返回一个 Observable
时,然后使用 complete
回调
someFunction() {
return returnsObservable()
.subscribe(
event => doForEachEvent(),
error => handleError(),
() => doSomethingNext()
.then(result => doSomethingAfterThat());
}
doSomethingNext()
在最后一个 event
之后执行并且 doSomethingAfterThat()
再次与 then()
展示如何混合使用 observable 和 promise。 doSomething()
.
关于http - Angular2 - 如何在组件中链接异步服务调用(http 请求)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173649/