小编Ali*_*eed的帖子

在saga中监听动作的最佳方式:`while(true)take()`vs`while(take())`vs`takeEvery()`

我见过传奇以三种方式听取行动:

1. while(true)take()

function* onUserDetailsRequest() {
  while(true) {
    const { userId } = yield take(USER_DETAILS_REQUESTED);
    const response = yield call(fetchUserDetails, userId);
    put(USER_DETAILS_RECEIVED, response);
  }
}    
Run Code Online (Sandbox Code Playgroud)

2. while(take())

function* onUserDetailsRequest() {
  while(yield take(USER_DETAILS_REQUESTED)) {
    const userId = yield select(userSelectorFn);
    const response = yield call(fetchUserDetails, userId);
    put(USER_DETAILS_RECEIVED, response);
  }
}    
Run Code Online (Sandbox Code Playgroud)

3. takeEvery()

function* onUserDetailsRequest() {
  yield takeEvery(USER_DETAILS_REQUESTED, function* (action) {
    const { userId } = action;
    const response = yield call(fetchUserDetails, userId);
    put(USER_DETAILS_RECEIVED, response);
  }
}
Run Code Online (Sandbox Code Playgroud)

各自的优点和缺点是什么?在哪种情况下我们应该使用另一种情况?

javascript ecmascript-6 redux-saga

8
推荐指数
1
解决办法
2736
查看次数

yield []&yield all() - ES6/redux-saga之间的差异

是否有使用终极版,传奇的任何优势yield all([])ES6的内置yield []

为了并行运行多个操作,redux-saga建议:

const result = yield all([
  call(fetchData),
  put(FETCH_DATA_STARTED),
]);
Run Code Online (Sandbox Code Playgroud)

但是没有all()方法可以实现同样的目的:

const result = yield [
  call(fetchData),
  put(FETCH_DATA_STARTED),
];
Run Code Online (Sandbox Code Playgroud)

哪一个更好?为什么?

javascript yield ecmascript-6 redux-saga

7
推荐指数
1
解决办法
5631
查看次数

标签 统计

ecmascript-6 ×2

javascript ×2

redux-saga ×2

yield ×1