2017-04-02 4 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は、ノードスタイルのコールバックを使用しているようです。このようなAPIコールからオブザーバブルを作成するために使用できるRxJS静的メソッドがあります:bindNodeCallback。あなたのmergeMap

、あなたは `mergeMap`は、戻り値として観測可能見込んでいるため、`バインド() `の前に` return`を追加する必要があり、この

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

ような何かを行うことができるはずそのコールバックに:) –

+0

@セバスチャンよく見られます。ありがとう。 – cartant

関連する問題