我目前正在尝试迁移我们的React Native应用程序,以利用hermes引擎。当使用sagaMiddleware.run(rootSaga)
运行rootsaga时,我们会得到错误:RangeError: Maximum call stack size exceeded (native stack depth), js engine: hermes
。
传奇的yield call
是一个控制器,它导入一个私有(npm-pkg(api客户端,在将结果返回给传奇之前发出所需的请求。npm包的导入导致了错误的发生,但在禁用hermes的情况下,它完全正常工作。
我不认为这是递归陷阱(可能是错误的(,但正如错误所说,调用api客户端包时创建的调用堆栈大小。这有道理吗?我尝试过催生和分叉传奇,但都无济于事。我相信可以增加调用堆栈的大小,但我觉得这是一个变通方法,不确定在什么情况下应该更改它。我觉得这个堆栈运行应该没有问题。
找到了我的答案。正在导入的私有api客户端模块正在利用ajv进行模式验证。大量的模式导致了ajv中的最大调用堆栈问题。看见https://github.com/ajv-validator/ajv/issues/1581了解更多详细信息。