http - Angular2 - 如何在组件中链接异步服务调用(http 请求)?

标签 http asynchronous angular chaining

我有一个组件,它首先需要调用一个 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());
}

确保您有一个返回该链的 Promisereturn,这样 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/

相关文章:

rest - 通过 HTTPs 使用 REST 服务时出错

scala - RxScala Observables 与 Play Framework 枚举器

Angular - 在返回的 JSON 数组中强制执行模型格式

javascript - 为什么我的页面标题中有不间断空格?

javascript - axios随机请求数

http - 使用代理缓存昂贵的传出 HTTP 请求?

c# - 在 C# 中生成异步方法调用 - AOP?

javascript - 如何在 Node js 中同步使用串口?

unit-testing - 如何在 Angular2 rc5 中导入 jasmine 测试函数

node.js - 复制 Angular 项目目录不起作用