在 Redux Saga 中具有地图功能的 fork

问题描述 投票:0回答:4

我是redux-sagas的初学者,我对以下情况感到困惑。我有一个项目数组,我想为每个项目分叉相同的方法。所以我正在使用这行代码:

yield items.map(item => fork(loadItemDetails, item));

使用上述代码,永远不会调用

loadItemDetails
。相反,如果我对每个项目单独调用
fork
,如下所示,那么它会按预期工作。

yield fork(loadItemDetails, items[0]);
yield fork(loadItemDetails, items[1]);
yield fork(loadItemDetails, items[2]);

这让我很困惑,我无法弄清楚地图不起作用的原因。

javascript reactjs redux-saga
4个回答
7
投票

我遇到了同样的问题。

items.forEach(item => yield fork(loadItemDetails, item));

不会工作,因为您会收到以下错误:

'yield' 表达式只允许在生成器主体中使用。

为了解决,我用了

yield all

export function* itemDetailsSage() {
  const { items } = yield take(SET_CART_ITEMS);
  yield all(items.map(item => fork(loadItemDetails, item)));
}

2
投票

可能有点晚了,但这应该有用。

for (let i = 0; i < items.length; i++) {
    yield fork(loadItemDetails, items[i]);
}

0
投票

我相信如果你在循环内添加

yield
fork()
之前而不是
.map()
如果你使用
.forEach()
那么它应该像另一个例子一样工作你有分离
fork
电话。

尝试以下操作:

items.forEach(item => yield fork(loadItemDetails, item));

希望对您有所帮助!


0
投票

如何使用

for of

for (let item of items) {
    yield fork(loadItemDetails, item);
}
© www.soinside.com 2019 - 2024. All rights reserved.