簡體   English   中英

RxJs-訂閱可觀察的最后位置

[英]RxJs - Subscribe to observable at last place

我有一個有角度的4應用程序。 在此應用程序中,我有一個貝寶服務,該服務完成一些服務器工作,並(從客戶端)導航至貝寶。

 @Injectable() export class PaypalService { private readonly http: HttpApi; constructor(private readonly httpFactory: HttpFactoryService) { this.http = httpFactory.get(HttpRequestType.Secured); } checkout(transactionId: string): Observable<Response> { let subscriber = this.http.post(environment.paymentServer + '/pay', {transactionId: transactionId}) subscriber.subscribe((response:Response) => { let result = response.json(); window.location.href = result.paymentUrl; }); return subscriber; } } 

我希望僅在通知所有訂戶之后才調用window.location.href。

 paypal.checkout("1234").subscribe(() => //This code should be called before the navigation will start doSomeCleaning()) 

我知道我可以使用延遲,但是我想知道是否有更好的選擇。

由於您需要強制以特定順序調用觀察者,因此您不應依賴於他們的訂閱順序。 最簡單的方法是立即使用setTimeout()

observable.subscribe((response:Response) => {
    let result = response.json();
    setTimeout(() => window.location.href = result.paymentUrl);
});

或者,也許更好和更好的Rx方法是使用observeOn運算符和async Scheduler將值發送給另一個JS事件中的第一個觀察者。

import { async } from 'rxjs/scheduler/async';

...

let observable = ...
observable.observeOn(async).subscribe(...);

return observable;

您為什么不按如下所示在回調中進行重定向:

paypal.checkout("1234").subscribe((res) =>{
   doSomeCleaning();
   window.location.href = res.paymentUrl; 
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM