[英]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.