последствия: {
/**
* 数据查询
*
* <strong i="6">@param</strong> {any} { payload }
* <strong i="7">@param</strong> {any} { select, call, put }
*/
query: async function ({ payload }, { select, call, put }) {
await put({ type: 'show_loading' });
payload.page = payload.page || 1;
payload.limit = payload.limit || 10;
let data = await call(query, '/home/course', payload);
if (data) {
await put({
type: 'query_success',
payload: {
list: data.data,
total: data.count,
current: data.currentPage,
},
});
}
}
},
последствия: {
/**
* 数据查询
*
* <strong i="6">@param</strong> {any} { payload }
* <strong i="7">@param</strong> {any} { select, call, put }
*/
query: function* ({ payload }, { select, call, put }) {
yield put({ type: 'show_loading' });
payload.page = payload.page || 1;
payload.limit = payload.limit || 10;
let data = yield call(query, '/home/course', payload);
if (data) {
yield put({
type: 'query_success',
payload: {
list: data.data,
total: data.count,
current: data.currentPage,
},
});
}
}
},
Да, эффект поддерживает только формулировку генератора. async
и await
можно использовать вне эффекта, а затем использовать вызов yield для изменения эффекта.
Я понимаю, слава богу
Извините, а будет ли у Effect возможность поддерживать асинхронность в будущем? @sorrycc
Async не имеет управляемого генератора, такого как cancel
, поэтому redux-saga решила использовать генератор.
ой
@sorrycc Как я могу отменить эффект?
@miaojiuchen Что это за сцена? Зачем отменять эффект?
@sorrycc Я столкнулся с таким сценарием:
Это нормально для одной страницы, но если вы посетите другие страницы, а затем вернетесь на предыдущую страницу, эффект 2 будет повторяться.
Как я могу отменить эффект 1, а затем запустить эффект 2?
Должен ли я использовать подписку на пути для вызова @@ CANCEL_EFFECTS?
благодаря.
@sorrycc Поскольку вы также упомянули, в каких сценариях необходимо использовать отмену здесь, на самом деле в большинстве случаев достаточно async / await. В текущем использовании используйте генератор / yield для вызова async / await. Это слишком болезненно. Автор может рассмотреть возможность одновременной поддержки обоих режимов и позволить пользователям выбирать самостоятельно, например, добавление элемента конфигурации и вызов режима async / await. после открытия, или адаптивного суждения.
Вы можете попробовать redva , тот же фреймворк
Самый полезный комментарий
@sorrycc Поскольку вы также упомянули, в каких сценариях необходимо использовать отмену здесь, на самом деле в большинстве случаев достаточно async / await. В текущем использовании используйте генератор / yield для вызова async / await. Это слишком болезненно. Автор может рассмотреть возможность одновременной поддержки обоих режимов и позволить пользователям выбирать самостоятельно, например, добавление элемента конфигурации и вызов режима async / await. после открытия, или адаптивного суждения.