2016-08-06 3 views
1

각도 2/웹 서비스 호출에 문제가 있습니다. 내 생각은 현지화되어야하는 구성 요소 내에서이를 사용할 수있는 주사기로 서비스를 만드는 것입니다 (이 경우 다른 언어 사용). 내 문자열은 데이터베이스에 저장되며 필요한 것은 웹 서비스를 사용하여 연관 배열에 저장하는 것입니다. 그런 다음 키로 값을 가져 오는 메소드를 제공하십시오.각도 2가 해결할 때까지 기다림

import {Injectable} from "@angular/core"; 
import { Http, Headers, RequestOptions, Response } from "@angular/http"; 

import "rxjs/add/operator/map"; 
import "rxjs/add/operator/share"; 

import myGlobals = require("./global"); 

@Injectable() 
export class LocalizationService { 
    private serviceUrl = myGlobals.urlPrefix + "api/public/Localization.asmx/GetStrings"; // url to web api 
    private observable: any; 
    private locString: {}; 
    private finished: boolean = false; 

    constructor(private http: Http) { 
     this.loadStrings("EN"); 
    } 

    private loadStrings(LanguageCode: string): void { 
     let body: string = JSON.stringify({ LanguageCode }); 
     let headers: Headers = new Headers({ 
      "Access-Control-Allow-Origin": "*", 
      "Content-Type": "application/json" 
     }); 
     let options: RequestOptions = new RequestOptions({ headers: headers }); 
     this.observable = this.http.post(this.serviceUrl, body, options) 
      .map(response => { 
       this.observable = null; 
       let responseText: string = response.text().substring(0, response.text().lastIndexOf("{")); 
       this.locString = JSON.parse(responseText).Data; 
       this.finished = true; 
      }) 
      .share(); 

     return; 
    } 

    public getStr(code: string): string { 
     let returnString: string; 
     try { 
      returnString = this.locString[code]; 
     } 
     catch (error) 
     { 
      returnString = ""; 
     } 

     return returnString; 
    } 
} 

이제 내가 무엇을 해결할 수 : 생성자는 웹 서비스를 호출하고 즉시 종료는 응답을 기다리지 않고 여기 내 예제 코드입니다. 따라서이 구성 요소에 주사 가능한 서비스를 사용하면 올바른 언어로 렌더링되어야하며 렌더링 시간 동안 문자열이로드되지 않습니다. 정확히 말하면, 중단 점을 .map() 호출로 설정하면 절대 중단되지 않습니다. 이것은 최악의 문제는 아니며, 내가 앱의 다른 장소에서하고있는 것처럼 약속을 사용하여 할 수 있습니다. 웹 서비스에 전화해야 할 때 약속이 잘 작동합니다. 문제는 서버에서 재생을 기다리지 않는다는 것입니다. 나는 그런

What is the correct way to share the result of an Angular 2 Http network call in RxJs 5?

다른 질문과 답변을 확인했지만이 어떤 식 으로든 나에게 도움이되지 않습니다. 응답이 반환 될 때까지 응용 프로그램을 대기 상태로 만들 수 없습니다. 내가 뭘 잘못하고 있는지 말해 줄 수있는 사람이 있습니까?

+0

비동기 호출이 반환 될 때까지 응용 프로그램이 대기하도록 만드는 방법은 없습니다. 응답이 도착하면 코드를 실행하는 것입니다. 이것이 귀하가 보여준 질문에 대한 답변입니다. –

+0

별로 좋은 소식을 주셔서 감사합니다 :) 그렇다면 웹 서비스를 사용하여 앱을 현지화 할 수있는 방법을 제안 할만한 것이 있습니까? – Martin

+0

링크 된 질문에 대한 대답이 제시합니다. 서버의 값을 사용하려면 Observable을 사용하여 값을 제공하고 observable에 가입하여 액세스하십시오. –

답변

-4

찾고 계신 분은 Observables입니다.

관련 문제