Angular 角度2观察值:获取返回服务值的安全方法

Angular 角度2观察值:获取返回服务值的安全方法,angular,Angular,我正在寻找方法来处理这个可观察对象向我抛出的结果,并且我总是能够从回调外部获得服务返回给我的值 我提出的一个问题是: 经常发生的情况是,尽管服务成功地将值返回给我,但我无法将信息成功保存在this.templateFields[key]。Lookup private getLookUpsFromFields() { var lu: any[] = []; //console.log('templatefields', this.templateFields); for (cons

我正在寻找方法来处理这个可观察对象向我抛出的结果,并且我总是能够从回调外部获得服务返回给我的值

我提出的一个问题是:

经常发生的情况是,尽管服务成功地将值返回给我,但我无法将信息成功保存在
this.templateFields[key]。Lookup

  private getLookUpsFromFields() {
  var lu: any[] = [];
  //console.log('templatefields', this.templateFields);
  for (const key in this.templateFields) {
  if (this.templateFields[key].SimpleDataType === 'String List, Multi' ||
      this.templateFields[key].SimpleDataType === 'String List, Single') {
    //console.log('Field Lookup', this.templateFields[key].Field);
    this._lookUpsService.getLookUpsOfField(this.model, this.templateFields[key].Field).subscribe(success => {
       lu = this._lookUpsService.getArrayLook(success['metadataAllLookUpField']);
         localStorage.setItem(this.templateFields[key].Field, JSON.stringify(lu));
         }, error => {
            this.ShowMsg(error);
      });
      this.templateFields[key].Lookups =   JSON.parse(localStorage.getItem(this.templateFields[key].Field));
    }
    //localStorage.removeItem(this.templateFields[key].Field);
  }
}
//查找服务

getLookUpsOfField(model: string, field: string){
  //console.log(this.url + '/' + model + '/' + propertyType);
return this._httpS.get(this.url + '/' + model + '/' + field);
}


getArrayLook(lookups: any) {
  var array: any[] = [];
  if (lookups !== undefined && lookups !== null) {
    lookups.map(x => {
      array.push({Field: x.lookup_values.split(x.delimiter)[0], value: x.lookup_values.split(x.delimiter)[1]});
  });
  }
  return array;
}
我知道处理服务返回值的一种方法是在可观察的范围内处理它们,但是我还有什么其他选择呢?除了这两个备选方案外,我还展示了: 1-)使用本地存储 2-)在可观察范围内处理逻辑

我想保证this.templateFields[key].Lookup始终接收回调的返回值

有别的选择吗? 将提供任何额外信息。
我正在使用angular 2+

您可以创建服务来存储数据和获取数据 创建一个变量来存储数据 创建用于设置数据和获取数据的方法

//数据服务

import { Injectable } from '@angular/core';
@Injectable()
export class CommonDataService {
 public Data:any;

    getData(): any{
            return this.Data;
        }

        setData(data: any) {
            this.Data= data;
        }
}
当您想要存储数据时,请调用服务的set方法;当您想要获取数据时,请调用服务的get方法

private getLookUpsFromFields() {
  var lu: any[] = [];
  //console.log('templatefields', this.templateFields);
  for (const key in this.templateFields) {
  if (this.templateFields[key].SimpleDataType === 'String List, Multi' ||
      this.templateFields[key].SimpleDataType === 'String List, Single') {
    //console.log('Field Lookup', this.templateFields[key].Field);
    this._lookUpsService.getLookUpsOfField(this.model, this.templateFields[key].Field).subscribe(success => {
       lu = this._lookUpsService.getArrayLook(success['metadataAllLookUpField']);
         this._commonDataService.setData(JSON.stringify(lu));
         }, error => {
            this.ShowMsg(error);
      });
      this.templateFields[key].Lookups =   JSON.parse(this._commonDataService.getData()));
    }
    //localStorage.removeItem(this.templateFields[key].Field);
  }
}

谢谢你的回答,但是,这个可行的解决方案对我不起作用,现在我正在用另一种方法,我再次思考这种调用查找的方法是否正确。