我是新來Angular 2.我的應用程序有一個配置文件列出所有的API網址。如何排隊兩個observable?
我創建了一個定位器服務來加載config.json。其他服務使用此服務來獲取其特定網址。
@Injectable()
export class LocatorService {
private config: any;
private loadConfig: Promise<any>;
constructor(private _http: Http) {
this.loadConfig = this._http.get('config/config.json')
.map(res => this.config = res.json()).toPromise();
}
public getConfig() {
return this.loadConfig.then(() => this.config);
}
}
我有這個其他服務發送一個HTTP請求到一個URL。此服務從定位器服務獲取URL。
@Injectable()
export class OtherService {
private _data: any;
private url: string;
constructor(private _http: Http, private locatorService: LocatorService) {
this.geturl();
}
public loadData(): model[] {
this.geturl().then(() => this._http.get()
.map(res => this._data = res.json())
.catch(error =>
Observable.throw(error.json().error || 'Server error'))
.subscribe(t => this._data = t.json());
return this._data;
}
private geturl() {
return this.locatorService.getConfig().then(t => {
this.url = t.serviceUrl;
console.log(this.url);
});
}
}
我的組件調用此loadData n獲取所需的數據。我如何實現相同?
我不是很清楚如何等待配置url被加載然後發送http請求並返回數據。
請幫忙。
在這裏使用承諾有什麼意義?這兩個請求實際上都是可觀察的。而且你做錯了什麼,因爲上面的代碼應該導致順序請求。請提供[MCVE](http://stackoverflow.com/help/mcve)來複制這個問題,一個plunk會有所幫助。 – estus