Angular 6等待订阅完成

时间:2019-02-26 15:15:44

标签: angular rxjs

我有类似的功能

getNumber(value) {
    this.myService.getApi(value).subscribe(data => {
  this.myVariable = data;
});
    }

我正在其他函数中调用该函数,如下所示:

set() {
    if (this.value == 1) {
this.getNumber(firstNumber)
this.newVariable = this.myVariable;
    }
    else {
this.getNumber(secondNumber)
this.newVariabe = this.myVariable + 1;
   }
};

this.value正在从其他函数获取。问题是this.newVariable为空。我确定这是因为在我尝试访问this.Variable

之前,订阅还没有完成

在执行其他任何操作之前,有什么方法可以等待订阅完成吗?

1 个答案:

答案 0 :(得分:1)

只需从getNumber返回一个Observable并订阅它即可。

您还可以将管道添加到getNumber,以便它将处理存储数据并返回Observable进行订阅。

getNumber(value) {
    return this.myService.getApi(value).pipe(tap(data => {
        this.myVariable = data;
    }));
}

在您设置的方法中

set() {
    if (this.value == 1) {
      this.getNumber(firstNumber).subscribe(() => {
        this.newVariable = this.myVariable;
      });
    }
    else {
      this.getNumber(secondNumber).subscribe(() => {
        this.newVariabe = this.myVariable + 1;
      });
   }
};