Могу ли я использовать return, чтобы остановить выполнение в функции генератора? - PullRequest
0 голосов
/ 28 сентября 2018

В приведенном ниже коде я использую return, чтобы остановить выполнение функции генератора и позволить саге, которая вызывала генератор, продолжить работу.Я не совсем понимаю, что происходит за кулисами.Хорошо ли возвращение в приведенном ниже коде или оно будет иметь непредвиденные последствия?

export function* getSessionToken(user: string | CognitoUser, redirect: string = '') {
    try {
        return yield call(refreshAwsSession, user, 'sessionToken');
    } catch (error) {
        if (redirect) {
            const search = '?redirect=' + encodeURIComponent(redirect);
            yield put(push({ pathname: '/signin', search: search }));            
            return;
        }

        yield put(push('/signin'));
    }
}

1 Ответ

0 голосов
/ 01 октября 2018

Саги генераторы под капотом, поэтому можно использовать return:

function* a() {

  yield 1;
  return 2;
  yield 3; // never goes here
}

const a1 = a();

console.log(a1.next().value);
console.log(a1.next().value);
console.log(a1.next().value);
...