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