RxJS和redux-observable:mapTo()

时间:2017-01-20 18:39:35

标签: rxjs redux-observable

我正在尝试发送' SET_MIDDLEWARE_TYPE'使用payload.type =' observable'进行操作,等待5秒,然后进行API调用。目前,尚未调度SET_MIDDLEWARE_TYPE操作。如果我删除延迟和mergeMap,它会调度该操作。

预期: FETCH_USER_WITH_OBSERVABLE_REQUEST - > SET_MIDDLEWARE_TYPE(等待5秒) - > FETCH_USER_WITH_OBSERVABLE_SUCCESS

实际值: FETCH_USER_WITH_OBSERVABLE_REQUEST - > (等待5秒) - > FETCH_USER_WITH_OBSERVABLE_SUCCESS

我如何获得预期的行为?

代码:

import { Observable } from 'rxjs';
import { githubApi } from './api';

const githubEpic = action$ =>
 // Take every request to fetch a user
  action$.ofType('FETCH_USER_WITH_OBSERVABLES_REQUEST')
    .mapTo(({ type: 'SET_MIDDLEWARE_TYPE', payload: { type: 'observable'} }))
    // Delay execution by 5 seconds
    .delay(5000)
    // Make API call
    .mergeMap(action => {
      // Create an observable for the async call
      return Observable.from(githubApi.getUser('sriverag'))
        // Map the response to the SUCCESS action
        .map((result) => {
        return {
          type: 'FETCH_USER_WITH_OBSERVABLES_SUCCESS',
          payload: { result } ,
        };
      });
    });

export default githubEpic;

1 个答案:

答案 0 :(得分:2)

执行SET_MIDDLEWARE_TYPE时,您将放弃mergeMap操作。请注意您传递到名为mergeMap的{​​{1}}的参数?除非你传播它,否则它无法进一步向下游。

您需要将其添加到传出流中。我建议你改为:

action