Angular 如何在数组中获取服务的响应以供使用,如图2所示

Angular 如何在数组中获取服务的响应以供使用,如图2所示,angular,angular2-template,angular2-services,Angular,Angular2 Template,Angular2 Services,我已经声明了一个array.at.ts文件: responsearray:any=[]; 内部构造: constructor(private _dataService: UserService, private _ngZone: NgZone) { this.responsearray = this.getmarkers(id); this.moveMarker(this.responsearray); } 我想在movemarker函数中传递响应数组的更新值,它也在函数getmarke

我已经声明了一个array.at.ts文件:

responsearray:any=[];
内部构造:

constructor(private _dataService: UserService, private _ngZone: NgZone) {
 this.responsearray = this.getmarkers(id);
 this.moveMarker(this.responsearray);
}
我想在movemarker函数中传递响应数组的更新值,它也在函数getmarkers中更新,但上面未反映更新值:

getmarkers(id) {

this._dataService
    .GetMarker(id)
    .subscribe(res => {
            this.responseformate = Object.assign({}, res);
            this.responsearray = this.responseformate.responsepacket;

        },
        error => console.log(error),
        () => {
            return (this.responsearray);
        })
 }

问题:

constructor(private _dataService: UserService, private _ngZone: NgZone) {
 this.getmarkers(id);
}

getmarkers(id) {
    this._dataService
    .GetMarker(id)
    .subscribe(res => {
            this.responseformate = Object.assign({}, res);
            this.responsearray = this.responseformate.responsepacket;
            this.moveMarker(this.responsearray);
        },
        error => console.log(error));
}
constructor(private _dataService: UserService, private _ngZone: NgZone) {
    this.getmarkers(id).subscribe(() => { 
        this.moveMarker(this.responsearray);
    });
}

getmarkers(id):Observable {
    return this._dataService
    .GetMarker(id)
    .map(res => {
            this.responseformate = Object.assign({}, res);
            this.responsearray = this.responseformate.responsepacket;
        },
        error => console.log(error));
}

您正在从异步调用返回值,如果您想这样做,那么您必须返回可观察值,然后必须订阅事件,通过简单地返回值,您将不会得到预期的结果,它将返回可观察值

实现输出的简单方法是:

constructor(private _dataService: UserService, private _ngZone: NgZone) {
 this.getmarkers(id);
}

getmarkers(id) {
    this._dataService
    .GetMarker(id)
    .subscribe(res => {
            this.responseformate = Object.assign({}, res);
            this.responsearray = this.responseformate.responsepacket;
            this.moveMarker(this.responsearray);
        },
        error => console.log(error));
}
constructor(private _dataService: UserService, private _ngZone: NgZone) {
    this.getmarkers(id).subscribe(() => { 
        this.moveMarker(this.responsearray);
    });
}

getmarkers(id):Observable {
    return this._dataService
    .GetMarker(id)
    .map(res => {
            this.responseformate = Object.assign({}, res);
            this.responsearray = this.responseformate.responsepacket;
        },
        error => console.log(error));
}
另一种方式:

constructor(private _dataService: UserService, private _ngZone: NgZone) {
 this.getmarkers(id);
}

getmarkers(id) {
    this._dataService
    .GetMarker(id)
    .subscribe(res => {
            this.responseformate = Object.assign({}, res);
            this.responsearray = this.responseformate.responsepacket;
            this.moveMarker(this.responsearray);
        },
        error => console.log(error));
}
constructor(private _dataService: UserService, private _ngZone: NgZone) {
    this.getmarkers(id).subscribe(() => { 
        this.moveMarker(this.responsearray);
    });
}

getmarkers(id):Observable {
    return this._dataService
    .GetMarker(id)
    .map(res => {
            this.responseformate = Object.assign({}, res);
            this.responsearray = this.responseformate.responsepacket;
        },
        error => console.log(error));
}

通过简单地返回值,您将不会得到预期的结果,它将返回可观察的结果。->如何从返回的observable中获取值。然后您必须再次订阅并从getmarkers函数返回observable。我也更新了答案,请尝试一下。