You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React+Redux+Sagas项目中生成器内使用yield进行条件赋值报错的原因咨询

问题分析与解决方案

嗨,这个问题其实是JavaScript运算符优先级在搞鬼,我来给你拆解清楚:

为什么会报错?

你写的代码const test = obj?.test || yield call("other generator")里,||(逻辑或)的优先级比yield高得多。JavaScript解析器会把这段代码错误地解析成:

const test = (obj?.test || yield) call("other generator")

这时候yield被当成了一个普通的标识符(变量名),而不是Generator函数里用来暂停执行的关键字,自然就会抛出Can not use 'yield' as identifier inside a generator的错误。

怎么解决?

只需要给yield call(...)加上括号,让它成为一个独立的表达式,这样解析器就能正确识别yield的作用了:

// 注意括号包裹yield表达式
const test = obj?.test || (yield call(otherGenerator))

另外提个小建议:call的第一个参数应该是生成器函数的引用,而不是字符串哦(除非你是用了动态导入或者特殊的saga配置),直接传函数会更规范。

补充小知识点

yield在JavaScript里的优先级是所有运算符里最低的之一,所以只要它和其他运算符混合使用,几乎都需要用括号明确表达式的边界,避免解析错误。

内容的提问来源于stack exchange,提问作者Jortega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 20:47:39