2016-12-28 18 views
3

イオン2アプリケーションでWebサービスを呼び出そうとしていますが、約束と観測可能の間にぶつかり合っています。 これは私が今、私は私のサービスファイルにuserGetDetail関数を呼び出していますボタン -イオン2アプリケーションで観測可能な約束を使用

​​

のクリックで呼び出しています私の関数です。

userGetDetail(eid){ 
    var url = '/userGetDetail'; 
    var params = { 
       'EID':eid 
      }; 
    console.log(JSON.stringify(params)); 
    var headers = new Headers(); 
    this.createAuthorizationHeader(headers); 
    this.storage.get('remedyAccessToken').then((value)=>{ 
     var token = value.toString(); 
     console.log("TOKEN IN REMEDYSERVICES="+token); 
     headers.append('Authorization', token); 
     console.log("header value inside="+JSON.stringify(headers)); 
    }) 
    console.log("header value outside="+JSON.stringify(headers)); 
    let options = new RequestOptions({ headers: headers }); 
    this.response = this.http.post(url,this.urlEncode(params),options).map(res => res.json()); 
    console.log("Response JSON="+JSON.stringify(this.response)); 
    return this.response; 
} 

ここで、認証がヘッダーに追加される前に、フローが次の行に行き、Web APIがエラーを出すという問題があります。 私は、権限が付与された後にサービスコールのみが発生するような方法で同期することができます。 Web API呼び出しをブロック内に入れようとしましたが、サービス呼び出しを約束します。 助けていただければ幸いです。

答えて

-1

約束し、観察者がthis-

return Observable.fromPromise(this.storage.get('remedyAccessToken')).then((value)=>{ 
    var token = value.toString(); 
    console.log("TOKEN IN REMEDYSERVICES="+token); 
    headers.append('Authorization', token); 
    console.log("header value inside="+JSON.stringify(headers)); 
    console.log("header value outside="+JSON.stringify(headers)); 
    let options = new RequestOptions({ headers: headers }); 
    this.response = this.http.post(url,this.urlEncode(params),options).map(res => res.json()); 
    console.log("Response JSON="+JSON.stringify(this.response)); 
    return this.response.toPromise(); 
}) 
+0

'' Observable''に '' get''演算子がありません。 http://reactivex.io/documentation/operators.html – raj

+0

が約束の方法に更新されました...間違いでした – RHUL

+0

ソリューションに余分な括弧があります。そして、それが他人のために役立つように答えを記入してください。 – raj

3

storage.getの中のapiにアクセスする必要があります。これにより、api呼び出し時に値が使用可能になります。次にapiコールをObservableに変換してtoPromise()とお約束します。これで応答はPromiseにアクセスできます。ここにあなたのコードからのおおよそのワークフローがあります。

this.storage.get('remedyAccessToken').then((value)=>{ 
    var token = value.toString(); 
    console.log("TOKEN IN REMEDYSERVICES="+token); 
    headers.append('Authorization', token); 
    console.log("header value inside="+JSON.stringify(headers)); 
    console.log("header value outside="+JSON.stringify(headers)); 
    let options = new RequestOptions({ headers: headers }); 
    this.response = this.http.post(url,this.urlEncode(params),options).map(res => res.json()); 
    console.log("Response JSON="+JSON.stringify(this.response)); 
    return this.response.toPromise(); 
}) 



this.remedyService.userGetDetail(this.loginDetailsObj.username).then(fn).catch(fn); 

出力がObservableの場合、この方法に従ってください。

Observable.fromPromise(this.storage.get('remedyAccessToken')).flatMap((value)=>{ 
     var token = value.toString(); 
     console.log("TOKEN IN REMEDYSERVICES="+token); 
     headers.append('Authorization', token); 
     console.log("header value inside="+JSON.stringify(headers)); 
     console.log("header value outside="+JSON.stringify(headers)); 
     let options = new RequestOptions({ headers: headers }); 
     this.response = this.http.post(url,this.urlEncode(params),options).map(res => res.json()); 
     console.log("Response JSON="+JSON.stringify(this.response)); 
     return this.response 
}) 

この方法では、必要な結果が得られます。

+0

こんにちはRajのようになりますリターンの内側にオブザーバーを呼び出すための正しい方法は、とにかく私が観察者にリターンthis.responseを変換することができますがありますか? – RHUL

+0

私はそれを別の方法で更新しました。 – raj

+0

HI Raj、私はflatMapが約束のプロパティではないと思います、私のストレージは約束を返すので、flatMapはここで使用できません。 – RHUL

関連する問題