私のアプリでは、POST
使用したすべてのリクエストを呼び出すためにservice
。
私が取得すると、特定のコード(例:401)を、サーバから、私は新しいトークンを取得するAPIを呼び出します。
別のトークンが受信されるまで、から他のAPI呼び出しがある場合は、それらすべてのリクエストを配列に格納します。nリクエストの場合があります。今のところ、newTokenAPIの呼び出しの進行中に3つのAPI呼び出しがあると想定します。
新しいトークンを取得したら、それを後続のすべてのAPIに渡す必要があります。次に、保留中のすべてのAPIリクエストを実行し、それぞれの呼び出しにデータを提供する必要があります。
コード例:
api.service.ts
POST(URL , param){
return new Observable<any>(observer => {
let headers = new HttpHeaders({
'Content-Type': 'Content-Type': 'application/json'
});
let options = {
headers: headers
};
this.http.post(URL, param, options)
.subscribe(data => {
var apiRes: any = data;
this.inValidSession();
observer.next();
observer.complete();
}
......
// For execute pending request I have set this
for (let i = 0; i < this.queue.length; i++) {
this.REPOST(this.queue[i].param, this.queue[i].url).subscribe((queueResponse) => {
observer.next(queueResponse);
observer.complete();
this.queue.shift();
});
}
}
user.component.ts
ngOnInit(){
this.getUserData();
this.getProductData();
}
getUserData(){
this.apiService.post({},'/apiName').subscribe((response) => {
console.log(response);
})
}
getProductData(){
this.apiService.post({},'/apiName2').subscribe((response) => {
console.log(response);
})
}
問題は、保留中のすべてのAPIを実行すると、コンソールにデータが表示されることです。ただしsubscribe
、サービスファイルからそれぞれの.ts
ファイルの機能までではありません。
注:サブスクライブされたデータは、それぞれではなく1つの関数でのみ取得されます。言い換えれば、私は両方のAPI解像度をgetProductData()
機能させます。理由はわかりません。
誰かが解決策を持っているなら私を助けてください。
使用できます
forkJoin()
複数の通話を同時に処理するために、複数の通話を行うことができrequest
、サブスクライブした後array
、応答が得られます。
例えば
forkJoin(Service1.call1,
Service2.call2)
.subscribe(([call1Response, call2Response]) => {
ここで、service1とservice2は、関数ccall1とcall2を持つサービスであり、return
タイプはObservable
あなたはここでもっと見つけることができます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加