我可以使用 return 来停止生成器函数的执行吗?
Can I use return to stop execution in a generator function?
在下面的代码中,我使用 return 停止生成器函数的执行,让调用生成器的 saga 继续 运行。我不明白幕后到底发生了什么。在下面的代码中使用 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'));
}
}
Sagas 是 generators 的底层,所以可以使用 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);
在下面的代码中,我使用 return 停止生成器函数的执行,让调用生成器的 saga 继续 运行。我不明白幕后到底发生了什么。在下面的代码中使用 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'));
}
}
Sagas 是 generators 的底层,所以可以使用 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);