react/redux/sagas - 如何根据现有商店数据链接操作?

react/redux/sagas - how to chain actions based on existing store data?

我正在尝试根据状态是否包含数据在 saga 中触发操作。

因为我已经有从 books/games 获取数据的传奇,所以我想重用该功能。我只想在商店没有该数据时解雇那些人。

到目前为止,这是我的代码...

function* getAllSaga(action) {
    try {

        let books = yield select(Selectors.books);
        let games = yield select(Selectors.games);

        if(!books.length || !games.length){
            yield put({ type: 'GET_BOOKS' });
            yield put({ type: 'GET_GAMES' });
        }

        books = yield select(Selectors.books);
        games = yield select(Selectors.games);

        const concated = books.concat(games);

        yield put({ type: 'GET_ALL_SUCCEEDED', all: concated });

    } catch (err) {
        yield put({ type: 'GET_ALL_FAILED', message: err.message });
    }
}

我该如何解决?

puts 是非阻塞的,所以你需要修改你的代码,让它像这样等待新数据:

function* getAllSaga(action) {
    try {

        let books = yield select(Selectors.books);
        let games = yield select(Selectors.games);

        if(!books.length || !games.length){
            yield put({ type: 'GET_BOOKS' });
            yield put({ type: 'GET_GAMES' });
            yield all([
                take('GET_BOOKS_SUCCEEDED'),
                take('GET_GAMES_SUCCEEDED')
            ])
            books = yield select(Selectors.books);
            games = yield select(Selectors.games);
        }

        const concated = books.concat(games);

        yield put({ type: 'GET_ALL_SUCCEEDED', all: concated });

    } catch (err) {
        yield put({ type: 'GET_ALL_FAILED', message: err.message });
    }
}