结合多种传奇

时间:2017-11-19 08:58:12

标签: redux redux-saga

对于我使用

的多个传奇
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)
    ]);

}

之间有什么区别?我们可以在哪里使用产量?

1 个答案:

答案 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将继续使用这两个承诺的结果生成函数。