回調

2017-03-22 75 views
0

返回觀察到的項目,我需要一個switchMapObservables<Action>回調

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

     } 
    ) 
); 

其中

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

正如你所看到的,createToken第二個參數是一個回調函數,我應該處理。所以,我不知道在回調被調用時返回一個新的動作,因爲它被稱爲observable已經通過了。

回調的簽名是:

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

正如你可以看到它reuturns => void

根據響應數據達到回調時如何創建Action項?

所以目標是回到另一個動作(但是當達到回調:

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

我不知道如果我解釋這麼好

回答

1

如果我理解正確的話,你。要創建所有回調可觀察到的如果是這樣,請bindCallback這裏是一個鏈接的文檔:。http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-bindCallback

例如:

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

感謝@Sebastian。它看起來很好。我試過使用'Observable.bindCallBack',但這種方法不可用。我需要導入一些東西嗎? – Jordi

+0

如果你從'rxjs/Observable'做了'import {Observable};''bindCallback'應該可用。注* LOWER *「b」! –

+0

我使用'rxjs/Observable';'import {Observable}來導入它。儘管如此,方法不可用。我正在使用5.2.0版本... – Jordi