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。谢谢