RxJS和redux可观察:在mapTo()之后未正确应用延迟(时间)

RxJS和redux可观察:在mapTo()之后未正确应用延迟(时间),rxjs,redux-observable,Rxjs,Redux Observable,我正在尝试使用payload.TYPE='observable'分派'SET\u MIDDLEWARE\u TYPE'操作,等待5秒钟,然后进行API调用。当前,未调度SET_中间件类型操作。如果我删除延迟和合并映射,它将调度该操作 预期: 使用可观察请求获取用户-->设置中间件类型(等待5秒)-->使用可观察请求获取用户成功 实际: 使用可观察请求获取用户-->(等待5秒)-->使用可观察请求获取用户成功 我如何才能获得预期的行为 代码: 执行mergeMap时,您将放弃SET\u MIDDL

我正在尝试使用payload.TYPE='observable'分派'SET\u MIDDLEWARE\u TYPE'操作,等待5秒钟,然后进行API调用。当前,未调度SET_中间件类型操作。如果我删除延迟和合并映射,它将调度该操作

预期: 使用可观察请求获取用户-->设置中间件类型(等待5秒)-->使用可观察请求获取用户成功

实际: 使用可观察请求获取用户-->(等待5秒)-->使用可观察请求获取用户成功

我如何才能获得预期的行为

代码:


执行
mergeMap
时,您将放弃
SET\u MIDDLEWARE\u TYPE
操作。请注意传递到名为
action
mergeMap
中的参数?除非你把它传播出去,否则它就不能再下游了

您将需要将其前置到传出流。我建议您改为执行以下操作:

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 => 
      // Async call
      Observable.from(githubApi.getUser('sriverag'))
        // Map the response to the SUCCESS action
        .map(result => ({
          type: 'FETCH_USER_WITH_OBSERVABLES_SUCCESS',
          payload: { result }
        }))
        // Prepend the original action to your async stream so that it gets 
        // forwarded out of the epic
        .startWith(action)
    );

export default githubEpic;

(删除了我之前的评论,这被误解了。这个答案确实是正确的。)谢谢paulpdaniels!
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 => 
      // Async call
      Observable.from(githubApi.getUser('sriverag'))
        // Map the response to the SUCCESS action
        .map(result => ({
          type: 'FETCH_USER_WITH_OBSERVABLES_SUCCESS',
          payload: { result }
        }))
        // Prepend the original action to your async stream so that it gets 
        // forwarded out of the epic
        .startWith(action)
    );

export default githubEpic;