2017-04-02 48 views
5

我试图用应用程序购买挂钩我的应用程序使用此:https://github.com/chirag04/react-native-in-app-utilsRedux Observables/RxJS:如何制作基于if/else的返回不同动作的史诗?

我有一个史诗般的地方,如果它成功发射成功,失败如果失败。类似这样的:

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的内容。有没有办法做到这一点?

回答

2

InAppUtils.purchaseProduct似乎使用节点式回调。有一个RxJS静态方法可用于通过这样的API调用创建一个可观察对象:bindNodeCallback

在您mergeMap,你应该能够做这样的事

import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/bindNodeCallback'; 
import 'rxjs/add/observable/of'; 

... 
.mergeMap(action => { 
    const productId = action.payload; 
    const bound = Observable.bindNodeCallback((callback) => InAppUtils.purchaseProduct(productId, callback)); 
    return bound() 
    .map(response => subscriptionActions.subscribeSuccess()) 
    .catch(error => Observable.of(subscriptionActions.subscribeFailure())); 
}); 
+1

你需要在'约束()前面加一个''return'因为'mergeMap'预计可观察到作为返回值在其回调:) –

+0

@Sebastian好吧,发现了。谢谢。 – cartant

相关问题