Неожиданное зарезервированное слово «yield» в реаги-редуксе - PullRequest
1 голос
/ 13 февраля 2020

В моем проекте react, включая react-redux, я пытаюсь использовать yield в функции ошибки перехвата для запроса axios, например:

const result = yield axios.put(REQUEST_API, data, config)
  .catch(error => {
    yield put({ type: SET_MESSAGE, message: `ERROR_HAPPENED: ${error.response.data.status}` });
  });

Но в качестве Функция catch error не является генератором, я получаю эту ошибку:

Ошибка синтаксического анализа: неожиданное зарезервированное слово 'yield'

Поэтому я попытался изменить функцию ошибки к генератору:

const result = yield axios.put(REQUEST_API, data, config)
  .catch(function* (error) {
    yield put({ type: SET_MESSAGE, message: `ERROR_HAPPENED: ${error.response.data.status});
  });

Но теперь я получаю это предупреждение от eslint:

Неожиданная функция генератора без имени.

I Я не уверен, что не так с этим подходом, но этот способ axios никогда не улавливает ошибку!

Поэтому есть ли лучшая практика отправлять действие с yield put, если в запросе axios произошла ошибка

1 Ответ

0 голосов
/ 13 февраля 2020

yield может использоваться непосредственно внутри контекста Generators, и здесь вы используете его внутри обернутого улова обещания, который имеет собственный лексический контекст.

Правильный способ сделать это :

try {
   const result = yield axios.put(REQUEST_API, data, config);
   ... your more code...
} catch (err) {
   yield put({ type: SET_MESSAGE, message: `ERROR_HAPPENED`); 
}

Тот факт, что если обещание будет выполнено в блоке try, то оно будет автоматически попадать в блоке try.

Надеюсь, это поможет.

...