Angular 5+无法保存可观察响应的结果

时间:2018-05-18 08:15:14

标签: angular typescript http observable subscription

我有一个Angular应用程序,它使用来自webapi的数据。 当我提出请求时,我得到一个类型化的可观察数据。

现在当我这样做时:

data: Product[];
productService.getByProductId("061000957").subscribe(res => {
      console.log(res);
      this.data = res;
});
console.log(this.data);

我在控制台中看到的内容我可以看到这个

console screenshot

我可以清楚地看到,结果是我需要的产品。 但为什么我不能将其保存到我的本地变量数据?

由于

4 个答案:

答案 0 :(得分:1)

Observable就像promise一样异步。因此在返回响应之前执行console.log(this.data);。试试。

data: Product[];
productService.getByProductId("061000957").subscribe(res => {
       console.log(res);
       this.data = res;
       console.log(this.data);
    });

现在您在设置数据后打印数据。

答案 1 :(得分:0)

您正在使用async programming ,您无法暂停代码的执行,您的订阅将在以后解决,但您无法预测何时。订阅之外的console.log()在您的订阅被解决之前执行。您可以做的是您可以将值存储在订阅回调中的类属性中。请参阅this以便更好地理解。

   data: Product[];
productService.getByProductId("061000957").subscribe(res => {
       console.log(res);
       this.data = res;
       console.log(this.data);
    });

答案 2 :(得分:0)

您应该将数据保存在HTTP Observable订阅中:

productService.getByProductId("061000957").subscribe(res => {
   this.data = res;
   console.log(this.data)   //you can see
})

答案 3 :(得分:0)

你可以这样做,最后这里将在getProductId完成后执行

productService.getByProductId("061000957")
      .finally(() => console.log(this.data))
      .subscribe(res => {
           console.log(res);
           this.data = res; 
    });

当我尝试调试rxjs observable时,我使用 do,最后