rxjs:映射嵌套的observable

时间:2017-03-23 15:49:49

标签: rxjs

我正在努力编译这段代码:

this.actions$
    .ofType('ADD_SOURCE')
    .switchMap(
      (action: Action) => {
        var data = <StripeCardTokenData>{
          number: '4242424242424242',
          cvc: '132',
          exp_month: 12,
          exp_year: 2018
        };

        var callback = Observable.bindNodeCallback(Stripe.card.createToken);
        callback(data)
          .map((response: StripeCardTokenResponse) => {
            if (response.error)
              return <Action>{ type: 'ADD_SOURCE_FAILED', payload: { code: response.error.code, msg: response.error.message }};
            else
              return <Action>{ type: 'ADD_SOURCE_SUCCESS', payload: <CardDTO>{id: response.id, last4: response.card.last4}};
          })
          .catch(_ => {
            return Observable.of(<Action>{ type: 'ADD_SOURCE_FAILED', payload: { }});
          });
      }
    );
打字稿告诉我:

  

[TS]   类型的参数'(action:Action)=&gt; void'不能分配给类型'的参数(值:Action,index:number)=&gt; ObservableInput&LT; {}&GT;”。     类型'void'不能分配给'ObservableInput&lt; {}&gt;'。

Stripe.card.createToken是:see on here

Action是:

export interface Action {
    type: string;
    payload?: any;
}

1 个答案:

答案 0 :(得分:0)

您似乎没有从switchMap返回任何内容?使用switchMap,您可能会返回一个可观察的(显然是ObservableInput<{}>)而在这里你不知道。 callback(data)....不返回任何内容。也许你的意思是return callback(data)....

无论如何,这种错误实际上是微不足道的,打字稿很好地用信号通知它们。通常,错误正是它的本质。所以我建议你在发布之前花时间自己调查一下。事实上,你会更快地学习。