Преимущества использования расы в сагах - PullRequest
0 голосов
/ 11 июня 2018

У меня есть шаблон в моем приложении, относящийся к redux-saga, что для асинхронных вызовов у меня есть две функции: первая - прослушивание определенного действия, а вторая - вызов API.

  1. Функция слушателя:

    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
          }
       }
    }
    
  2. Функция выполнения вызова 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

Обновление :

Преимущества:

  • возможность отменить запрос

1 Ответ

0 голосов
/ 16 июня 2018

Действительно, использование race здесь является ненужным комплексом.

Если вы обрабатываете ошибки или отмену внутри самой вызываемой саги (userJoinFunction), то просто используйте try..catch / cancel как есть.более просто.

Если, с другой стороны, вам нужно отменить сагу, когда что-то происходит извне (тайм-аут, действие пользователя), тогда имеет смысл использовать эффект race.

...