我正在组件中使用rxjs库,该库具有名为uiSignal的东西。我正在尝试使用它在订阅电话期间显示“正在加载”屏幕。在简单的订阅服务器上,这似乎可以正常工作,但是在有嵌套订阅的地方,它不等待嵌套调用返回。
这是一个例子:
Button payButton = findViewById(R.id.pay_bttn);
payButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mPaymentSessionData.isPaymentReadyToCharge() && mPaymentSessionData.getPaymentResult() == PaymentResultListener.SUCCESS) {
// Use the data to complete your charge - see below.
mPaymentSession.completePayment(new PaymentCompletionProvider() {
@Override
public void completePayment(@NonNull PaymentSessionData data, @NonNull PaymentResultListener listener) {
Log.v(TAG, "Completing payment with data: " + data.toString());
// This is where you want to call your backend...
// In this case mark the payment as Successful
listener.onPaymentResult(PaymentResultListener.SUCCESS);
}
});
}
}
});
但是,加载页面仅显示“ DoSomething”订阅的上下文,而不会等待DoSomethingElse订阅返回。我也尝试将uiSignal添加到nestedMethod'DoSomethingElse'订阅上,但这也不起作用。
基本上我希望它显示直到嵌套方法完成。
答案 0 :(得分:0)
尝试使用switchMap
:
this.Service.DoSomething(this.thing)
.pipe(
switchMap((res) => this.nestedMethod())
)
.uiSignal({ uiLabel: 'Loading', debugInfo: '' })
.subscribe(thing => {});
nestedMethod() {
return this.Service.DoSomethingElse(this.OtherThing);
}
从理论上讲,这应该使uiSignal
位等待两个可观察对象完成。
答案 1 :(得分:0)
要解决此问题,我最终按照以下方法使用了Observable.forkJoin:https://netbasal.com/rxjs-six-operators-that-you-must-know-5ed3b6e238a0