UI5版本1.71中的"超出最大调用堆栈错误"

2020-08-19 08:06发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我有一个场景,其中有多个图标选项...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有一个场景,其中有多个图标选项卡,并且在切换选项卡时,我们正在使用扩展进行多个批处理调用(读取和/或更新)。 在UI5版本1.71中的读取调用期间,很多时候我们会收到"超出最大调用堆栈错误"的信息。 但可以在1.52等较低版本中正常工作

未捕获的RangeError:超出了最大调用堆栈大小

在构造函数中

在构造函数中D.resolveFromCache(ODataModel-dbg.js:6422)在构造函数中D.resolveFromCache(ODataModel-dbg.js:6441)在构造函数中D.resolveFromCache(ODataModel-dbg.js:6441) 构造函数中的.D.resolveFromCache(ODataModel-dbg.js:6441)。构造函数中的D.resolveFromCache(ODataModel-dbg.js:6441)。构造函数中的D.resolveFromCache(ODataModel-dbg.js:6441) 构造函数中的ODataModel-dbg.js:6441)。构造函数中的D.resolveFromCache(ODataModel-dbg.js:6441)构造函数中的D.resolveFromCache(ODataModel-dbg.js:6441)在构造函数.D.resolveFromCache(ODataModel-dbg.js :6441)

解决此问题的任何建议。

付费偷看设置
发送
6条回答
Baoming ROSE
1楼-- · 2020-08-19 08:57

检查一下

未捕获的RangeError校正

Saludos

Raquel

哎,真难
2楼-- · 2020-08-19 08:57

链接无法解决我的问题。 感谢您的回复。 仍在寻求帮助。

土豆飞人
3楼-- · 2020-08-19 09:04

这个错误几乎总是意味着您在JavaScript代码的递归方面遇到了问题,因为JavaScript中没有其他方法可以消耗大量堆栈。 有时一遍又一遍地调用递归函数,会导致浏览器向您发送超出最大调用堆栈大小的错误消息,因为可以分配给您使用的内存不是无限的。 完全可能的代码中也可能导致无限递归。 如果链中的promise实际上没有执行任何异步执行,则可能发生这种情况,在这种情况下,即使代码看上去是异步的,控制也永远不会真正返回事件循环。 在这种情况下,将递归函数调用包装到-

  • setTimeout
  • setImmediate或
  • process.nextTick

此外,您可以通过在RangeError类型的exception上设置断点来定位问题,然后适当地调整代码。 此外,您可以通过检查Chrome开发者工具栏控制台中的错误详细信息来设法找到导致错误的原因,这将为您提供调用堆栈中的功能,并引导您进行导致错误的递归。

Doze时光
4楼-- · 2020-08-19 08:40

我刚刚意识到这是因为代码始终进行相同的调用,并且服务将返回经过身份验证的用户的信息:

/UserSet('X')

这不是一个好习惯,应该在这种情况下使用函数调用(即getAuthenticatedUser)。

关于,
西尔文

Bunny_CDM
5楼-- · 2020-08-19 08:58

嗨,Sahidur,

我遇到了同样的问题,这就是造成我的原因的原因。 我在sap.ui.model.odata.v2.ODataModel类上使用read方法调用了函数导入,而不是使用专用的callFunction方法。 使用稍后解决了我的问题。

希望这对其他人有帮助,因为您现在肯定已经解决了问题。

此致

西尔万·卡图达尔

Climb_Ma
6楼-- · 2020-08-19 08:42

嗨,Sahidur,

发现另一种情况,它将对get实体执行相同的行为。 顺序如下:

/UserSet('user1')

/UserSet('user2')

/UserSet('user1')//第三次读取将产生与上面完全相同的堆栈跟踪

我的解决方法是在注销时将局部变量mPathCache设置为{}。 由于我正在扩展基本的ODataModel,因此这就是我的代码。

我在CustomODataModel的构造函数中订阅注销事件:

 sap.ui.getCore()。getEventBus()。subscribe(" userAuthentification","注销",this._invalidate.bind(this)); 

这是_invalidate函数:

 _invalidate:function(){
     this.mPathCache = {};
 } 

希望这对某人有帮助,

西尔万

一周热门 更多>