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 :thinking::pensive:
Nguyên nhân hẳn là đây:
https://redux-saga.js.org/docs/advanced/ForkModel.html

• A Saga terminates only after
      ◦ It terminates its own body of instructions
      ◦ All attached forks are themselves terminated

Mà takeEvery là 1 effect có sử dụng fork ở bên trong cho nên…

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?