나는이 시나리오를 가지고있다.
backend.json
{
"devServer": "http://server1/'",
"proServer" : "http://server2/'",
"use" : "devServer"
}
global.service.ts
import {Injectable} from '@angular/core';
import {Http, HTTP_PROVIDERS, Response, RequestOptions, URLSearchParams} from '@angular/http';
@Injectable()
export class GlobalService {
constructor(private _http: Http){}
getBackendServer(){
return this.server = this._http.get('./backend.json')
.map((res:Response) => res.json())
}
}
그리고이 다른 서비스를했습니다 : search.service.ts
import {Injectable} from '@angular/core';
import {Http, HTTP_PROVIDERS, Response, RequestOptions, URLSearchParams} from '@angular/http';
import {GlobalService} from '../services/global.service';
import 'rxjs/add/operator/map';
@Injectable()
export class SearchService {
server;
constructor( private _http: Http, private gs: GlobalService ) {
this.server = gs.getBackendServer().subscribe(
(data) => {
this.server = data[data.use];
},
(err) => {
console.log(err);
}
);
}
DoGeneralSearch(params:Search){
console.log(this.server);
let options = this.buildOptions(params);
return this._http.get(this.server + 'room/search', options)
.map((res:Response) => res.json())
}
}
수행 할 작업 : 분명히 보입니다 : JSON 파일에 백엔드 서버의 URL에 관한 정보를 보관하고 싶습니다. 그리고 글로벌 서비스가 서버를 반환해야 검색 서비스의 모든 방법에서이 서버를 사용할 수 있습니다.
문제는 다음과 같습니다. DoGeneralSearch () 메소드는 글로벌 서비스가 JSON 파일을 읽고 결과를 반환하는 태스크를 해결하기 전에 실행됩니다. 그래서 this.server = 구독자 {isUnsubscribed : false, syncErrorValue : null, syncErrorThrown : false, syncErrorThrowable : false, isStopped : false ...} 대신 결과 자체.
this.server 변수를 해결 한 직후에 DoGeneralSearch 메소드가 실행되지 않도록하는 방법을 찾아야합니다.
어떤 제안?