2016-07-06 1 views
1

次のことを行うことが可能である場合、私は思ったんだけど:どのように私はHTTP応答を返すことができますか?

私は、HTTPリクエストGET代わりに、直接のObservable<Response>インスタンスを返すからの応答を返す必要があります。

の例では、全部を少し明らかにするかもしれません:

@Injectable() 
export class ExampleService { 
    constructor(@Inject(Http) protected http: Http) { } 
    static model: { [uri: string]: any } = {} 
    public get(uri: string): any { 
    if (typeof ExampleService.model[uri] === 'undefined') { 
     ExampleService.model[uri] = this.http.get(uri).map(response => response.json()) // additionally do some magic here, it is Observable<any> instance now 
    } 
    return ExampleService.model[uri] 
    } 
} 

概要:

public get(uri: string): Observable<any> { 
    return new Observable(observer => { 
     if (!ExampleService.model[uri]) { 
     let sub = this.http.get(uri).map(response => response.json()).subscribe(
      src => observer.next(ExampleService.model[uri] = src), 
      err => console.error(err), 
     () => observer.complete() 
     ) 
     return() => sub.unsubscribe() 
     } 
     observer.next(ExampleService.model[uri]) 
     observer.complete() 
    }) 
    } 
:ソリューション上記 Günter Zöchbauer answerによると、私はこのようなものを使用する必要が代わりにそのことを、可能ではありません
+1

このリンクは問題の理解に役立ちますhttp://stackoverflow.com/questions/23231909/collect-rxjs-observable-to-array – AngJobs

答えて

5

HTTP要求が非同期であり、サーバーへの呼び出しが行われる前にget()メソッドが返されるため、これは不可能です。代わりに、サーバーからの応答が到着すると、subscribe(...)に渡されたコールバックが呼び出されます。

非同期から同期実行に戻る方法はありません。

呼び出し元が監視対象に登録し、応答が到着したときに何かを行うことができます。

関連する問題