Sự mơ hồ của Effect combinators trong redux-saga?
Cho đoạn code dưới (Ví dụ của redux-saga documentation):
function* incrementAsync() {
yield delay(1000);
yield put({ type: 'INCREMENT' });
console.log('a')
}
function* watchIncrementAsync() {
yield takeEvery('INCREMENT_ASYNC', incrementAsync);
console.log('b')
}
function* rootSaga() {
yield all([
watchIncrementAsync()
]);
console.log('c')
};
Tài liệu của họ ghi effect all là:
Creates an Effect description that instructs the middleware to run multiple Effects in parallel and wait for all of them to complete. It’s quite the corresponding API to standard Promise#all.
Nhưng lại không ghi rõ thế nào mới là complete??? Mình thấy watchIncrementAsync in ra b, tức là xong rồi? Nhưng console không hề in ra c?
Tài liệu cũng nói rằng: effect này nhận 1 array chứa các effect khác, nhưng ví dụ của họ cho thấy có thể bỏ được generator vào, vậy rốt cuộc là bỏ được cái gì vào?
Well, chắc là mình đọc tài liệu chưa kĩ, hoặc là do tài liệu mơ hồ thật
Nguyên nhân hẳn là đây:
https://redux-saga.js.org/docs/advanced/ForkModel.html
Mà takeEvery là 1 effect có sử dụng fork ở bên trong cho nên…