У меня есть шаблон в моем приложении, относящийся к redux-saga, что для асинхронных вызовов у меня есть две функции: первая - прослушивание определенного действия, а вторая - вызов API.
Функция слушателя:
function* userJoinListener() {
while (true) {
const { user } = yield take(UserJoinRequest);
const promiseRace = yield race({
res: call(userJoinFunction, user),
err: take(UserJoinError),
});
if (promiseRace.res) {
// code if success
} else {
// code if fail
}
}
}
Функция выполнения вызова API:
function* userJoinFunction(user) {
try {
return yield call(userJoin, user);
} catch (err) {
yield put(userJoinFail);
}
}
У меня вопрос : в чем преимущество использования race
именно здесь?Честно говоря, я мог бы просто использовать эту вторую функцию в том же месте, что и race
, и она работала бы, как и ожидалось:
function* userJoinListener() {
while (true) {
const { user } = yield take(UserJoinRequest);
try {
// code if success
return yield call(userJoin, user);
} catch (err) {
// code if fail
yield put(userJoinFail);
}
}
}
Спасибо:)
вопрос : Разница между Promise.race () и try / catch в redux-saga
Обновление :
Преимущества:
- возможность отменить запрос