Redux Observables/RxJS:如何使epic根据if/else返回不同的操作?
我正在尝试使用以下方法将我的应用程序与应用程序内购买连接: 我有一部史诗,我想在成功的时候释放成功,失败的时候释放失败。大概是这样的:Redux Observables/RxJS:如何使epic根据if/else返回不同的操作?,rxjs,redux-observable,Rxjs,Redux Observable,我正在尝试使用以下方法将我的应用程序与应用程序内购买连接: 我有一部史诗,我想在成功的时候释放成功,失败的时候释放失败。大概是这样的: import 'rxjs'; import { InAppUtils } from 'NativeModules'; import * as packagesActions from '../ducks/packages'; import * as subscriptionActions from '../ducks/subscription'; expor
import 'rxjs';
import { InAppUtils } from 'NativeModules';
import * as packagesActions from '../ducks/packages';
import * as subscriptionActions from '../ducks/subscription';
export default function createSubscription(action$, store) {
return action$.ofType(packagesActions.SELECT)
.mergeMap(action => {
const productId = action.payload;
InAppUtils.purchaseProduct(productId, (error, response) => {
if(response && response.productIdentifier) {
return subscriptionActions.subscribeSuccess();
} else {
return subscriptionActions.subscribeFailure();
}
});
});
};
但是,我不知道如何编写
mergeMap
的内容。有办法做到这一点吗?在应用程序中。purchaseProduct
似乎使用节点样式的回调。有一个RxJS静态方法可用于从这样的API调用创建一个可观察对象:
在您的mergeMap
中,您应该能够执行以下操作
从'rxjs/Observable'导入{Observable};
导入“rxjs/add/observable/bindNodeCallback”;
导入“rxjs/add/observable/of”;
...
.mergeMap(操作=>{
const productId=action.payload;
const bound=Observable.bindNodeCallback((回调)=>InAppUtils.purchaseProduct(productId,回调));
返回边界()
.map(响应=>subscriptionActions.subscribeSucces())
.catch(error=>Observable.of(subscriptionActions.subscriptbeFailure());
});
您需要在bound()
前面添加一个return
,因为mergeMap
期望在其回调中有一个可观察的返回值:)@Sebastian-Well-spotted。谢谢