2017-03-22 3 views
0

ich switchMap brauchen ein Observables<Action>: kannauf Rückruf beobachtbaren Punkt zurückkehren

this.actions$ 
    .ofType('LOAD_SOURCES') 
    .switchMap((action: Action) => 
     Stripe.card.createToken(
     <StripeCardTokenData>{name: "PLACEHOLDER NAME"}, 
     (status, response) { 

     } 
    ) 
); 

wo

private actions$: Actions; 
class Actions extends Observable<Action> {...} 
export interface Action { 
    type: string; 
    payload?: any; 
} 

Wie Sie eine Callback-Funktion der zweite Parameter von createToken ist zu sehen, sollte ich behandeln. Also, ich weiß nicht, eine neue Aktion zurückzugeben, wenn Callback erreicht ist, seit wann es Observable genannt wird, ist vergangen.

Die Unterschrift des Callback ist:

createToken(data: StripeCardTokenData, responseHandler: (status: number, response: StripeCardTokenResponse) => void): void; 

Wie Sie es reuturns => void sehen können!

Wie kann ich ein Aktionselement erstellen, wenn der Rückruf gemäß den Antwortdaten erreicht wird?

Das Ziel ist also eine andere Aktion zurückzukehren (aber wenn Rückruf erreicht:

this.actions$ 
    .ofType('ADD_SOURCE') 
    .switchMap(
     (action: Action) => 
     (Observable.of({ type: 'ADD_SOURCE_SUCCESS' }))); 

Ich weiß nicht, ob ich so gut erklärt habe

Antwort

1

Wenn ich Sie richtig verstehe, Sie. will eine beobachtbare von allen Callback erstellen Wenn ja, überprüfen bindCallback out Hier ist ein Link auf die Dokumentation:.. http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-bindCallback

zum Beispiel:

const log = (val, cb) => cb(val); 
 
const trace = Rx.Observable.bindCallback(log); 
 

 
trace('hello') 
 
    .subscribe(x => console.log(x));
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

+0

Dank @Sebastian. Es sieht gut aus. Ich habe versucht, "Observable.bindCallBack" zu verwenden, aber diese Methode ist nicht verfügbar. Muss ich etwas importieren? – Jordi

+0

Wenn Sie etwas wie 'import {Observable} von' rxjs/Observable 'gemacht haben, sollte 'bindCallback' verfügbar sein. Hinweis * LOWER * "b"! –

+0

Ich importiere es mit 'import {Observable} von 'rxjs/Observable';'. Nichtsdestotrotz ist die Methode nicht verfügbar. Ich benutze 5.2.0 Version ... – Jordi