takeUntil
不接受字符串作为其参数。相反,它期望一个它将订阅的可观察值,使用第一个下一个值作为信号。
除了
对于
ofType
这是redux observable提供的唯一一个操作符——其余的是RxJS内置。
takeUntil公司
mergeMap
在…内
这个
,既然我们正在处理一个承诺,我们需要使用
Observable.from
export const languageTimeZoneEpic = (action$) => {
return action$.ofType(CHANGE_LANGUAGE)
.mergeMap(action =>
Observable.from(
client.mutate({
mutation: languageMutation,
variables: { id: action.id, language: action.selected_language }
})
.then(result => changeLanguageFulfilled(result))
.catch(error => changeLanguageError(error))
)
.takeUntil(action$.ofType('END_LANGUAGE'))
);
};
然而,使用承诺
then
和
catch
export const languageTimeZoneEpic = (action$) => {
return action$.ofType(CHANGE_LANGUAGE)
.mergeMap(action =>
Observable.from(client.mutate({
mutation: languageMutation,
variables: { id: action.id, language: action.selected_language }
}))
.map(result => changeLanguageFulfilled(result))
.catch(error => Observable.of(
changeLanguageError(error)
))
.takeUntil(action$.ofType('END_LANGUAGE'))
);
};
这有时意味着它更冗长,但主要是关于不使用Promise的
因为这会使你的代码很难在redux中被观察到。“这是承诺捕获还是可观察捕获?”。当然,这只是我的观点:)
我以为阿波罗的客户没有办法
事实上