gpt4 book ai didi

javascript - 将回调从 Action 传递到 Epic

转载 作者:行者123 更新时间:2023-11-30 15:19:19 26 4
gpt4 key购买 nike

我目前正在使用 action creator 将回调函数传递给 Epic,但是我遇到了常见错误:Actions must be plain JavaScript objects...

有没有一种方法可以执行回调并继续处理 Epic 中的可观察对象?我也尝试过使用大括号和显式返回将链分配给变量并在调用回调后返回它,但我遇到了同样的问题。

代码:

const selectItem = (item, activeRow, cb) => ({ type: SELECT_ITEM, activeRow, item, cb });

const selectItemEpic = action$ =>
action$.ofType(SELECT_ITEM)
.mergeMap(action =>
Observable.forkJoin(
ajax.getJSON(...),
ajax.getJSON(...)
)
.map(res => returnSelectedItem({ ...res[0].response, ...res[1].response }, action.activeRow))
.map(() => action.cb()) // failing here
.takeUntil(action$.ofType(SELECT_ITEM))
);

最佳答案

map 运算符意味着 1:1 映射——因此它希望您在投影函数中返回一些内容。现在您返回的是 action.cb() 的结果。如果这不是一个操作(例如它不返回任何内容/undefined),那将是您的错误来源。

还不是 100% 清楚 returnSelectedItems() 返回什么,如果这实际上返回了您想要从史诗中发出的操作,您可以改为使用 do 运算符来产生 action.cb() 副作用而不影响流经流的实际值。

const selectItemEpic = action$ =>
action$.ofType(SELECT_ITEM)
.mergeMap(action =>
Observable.forkJoin(
ajax.getJSON(...),
ajax.getJSON(...)
)
.map(res => returnSelectedItem({ ...res[0].response, ...res[1].response }, action.activeRow))
.do(() => action.cb()) // do, instead of map
.takeUntil(action$.ofType(SELECT_ITEM))
);

关于javascript - 将回调从 Action 传递到 Epic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43990259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com