我知道我不应该试图从 saga 中发送 thunk,这与 redux-saga 试图做的事情背道而驰。但我在一个相当大的应用程序中工作,大部分代码都是用 thunk 编写的,我们正在逐位迁移,需要从 saga 内部发送一个 thunk。thunk 不能改变,因为它被用在其他部分(一个返回 promise 的 thunk),所以它会破坏很多东西。
配置存储:
const store = createStore(
rootReducer,
initialState,
compose(applyMiddleware(thunk, sagaMiddleware))
);
传奇:
// Saga (is called from a takeEvery)
function* watchWarehouseChange(action) {
const companyId = yield select(Auth.id);
// We use cookies here instead of localStorage so that we persist
// it even when the user logs out. (localStorage clears on logout)
yield call(Cookies.set, `warehouse${companyId}`, action.warehouse);
// I want to dispatch a thunk here
yield put.resolve(syncItems);
// put(syncItems) doesn't work either
}
沉思:
export function syncItems() {
console.log('first!');
return dispatch => {
console.log('second!');
return dispatch(fetchFromBackend()).then(
items => itemsDB.emptyAndFill(items)
)
}
}
每当syncItems()
执行时,只first!
记录。second!
永远不会发生。
PS:我没有收到任何错误或警告。