我试图根据状态是否包含数据来触发传奇内部的操作。
由于我已经有了从书籍/游戏中获取数据的传闻,我想重用该功能。如果商店没有那些数据,我只想解雇那些。
到目前为止这是我的代码......
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 });
}
}
我该怎么解决这个问题?
put
s是非阻塞的,因此您需要修改代码,以便等待新数据,如下所示:
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 });
}
}