如何在Angular中的observable之外获取变量

时间:2017-12-08 09:15:56

标签: javascript arrays json angular observable

我有一个Observable,它有一个数组。我想在Observable之外获取该数组,以便我可以将它与另一个数组合并。

    this.builderService.getCommercialData()
     .subscribe(
       data=>{
        this.commercialDetails = data;
        this.commercialDetailsArray.push(this.commercialDetails);

       console.log(this.commercialDetailsArray);
       this.newcommercialDetailsArray = 
                             this.commercialDetailsArray[0];
       const arrayLength = this.commercialDetailsArray.length;
         if (arrayLength < 1) {
          this.loaderStatus = false;
          this.dataLoaded = false;
          this.noData = true;
          } else {
            this.loaderStatus = false;
            this.dataLoaded = true;
            this.noData = false;
          }
        },
      error=>{},
     );

我想要抓取newcommercialDetailsArray

2 个答案:

答案 0 :(得分:1)

  

您无法使用实际数据访问订阅之外的数组,因为它是a   异步回调,您希望以同步方式访问它。您   可以使用以下

合并订阅内的数组
    myArray = [];

    this.builderService.getCommercialData()
     .subscribe(
       data=>{
        this.commercialDetails = data;
        this.commercialDetailsArray.push(this.commercialDetails);
       this.newcommercialDetailsArray = 
                             this.commercialDetailsArray[0];

       // do the merge here ;
       let myNewArray = 
       this.newcommercialDetailsArray.concat(this.myArray)   ;    
       const arrayLength = this.commercialDetailsArray.length;
         if (arrayLength < 1) {
          this.loaderStatus = false;
          this.dataLoaded = false;
          this.noData = true;
          } else {
            this.loaderStatus = false;
            this.dataLoaded = true;
            this.noData = false;
          }
        },
      error=>{},
     );

<强>更新

如果您需要运行两个可观察对象才能生成数据,则可能需要查看observables.forkJoin()

  

Fork Join forkJoin()运算符允许我们获取Observable列表   并行执行它们。一旦列表中的每个Observable都发出   forkJoin的值发出一个包含一个的Observable值   列表中Observables的所有已解析值的列表。

更多关于fork join的示例。

答案 1 :(得分:1)

  

我使用Angular 2

完成了它

ts文件

 ngOnInit() {

       this._basicService.getBasic().subscribe(
       data => {

           this.basicResponse = data;

           console.log(this.basicResponse);

           return this.basicResponse;

    }
  )
  }
  

我从服务中获取数据并将其放入basicResponse中,只需将数据从订阅功能控制台返回到另一个onclick函数,以检查basicResponse是否来了。

 save()
     {
       console.log(this.basicResponse)
    }
  

只需返回值。它对我有用