对于我使用
的多个传奇function* mySaga() {
yield takeEvery("USER_FETCH_REQUESTED", fetchUser);
yield takeEvery('INCREMENT_ASYNC', incrementAsync);
}
但我看到了其他设计模式:
function* mySaga() {
yield all([
yield takeEvery("USER_FETCH_REQUESTED", fetchUser),
yield takeEvery('INCREMENT_ASYNC', incrementAsync)
]);
}
之间有什么区别?我们可以在哪里使用产量?
答案 0 :(得分:2)
all
效果允许您并行执行效果。例如,假设您需要进行2次网络呼叫并在继续之前等待其结果:
const result1 = yield call(fetch, '/foo')
const result2 = yield call(fetch, '/bar')
在这种情况下,在解析result1之前,result2不会执行。
const [ result1, result2 ] = yield all([
call(fetch, '/foo'),
call(fetch, '/bar'),
])
在这种情况下,两个fetch
请求在彼此之后立即触发,而不等待任何一个解析。一旦两者都解决了,redux-saga将继续使用这两个承诺的结果生成函数。