2

나는이 시나리오를 가지고있다.

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 메소드가 실행되지 않도록하는 방법을 찾아야합니다.

어떤 제안?

연결된 질문


관련된 질문

최근 질문