首页 文章

离子3:错误setTimeout

提问于
浏览
0

我们正在使用:

  • 离子框架:3.6.0

  • 离子原生:^ 2.2.6

  • 离子应用程序脚本:2.1.4

  • 角核:4.3.5

  • Angular Compiler CLI:4.3.5

  • 节点:6.11.2

(我们也去了node_modules / @ ionic / app-scripts并将ws更新为1.1.4(正如你所做的那样) - )

做离子服务时我们得到这个错误:

运行时错误

macroTask'setTimeout':无法转换为'running',期望状态'scheduled','notScheduled' .

我们尝试使用过时的方式升级所有内容,这几乎是所有关于该主题的建议归结为 . 有时候错误仍然存在 . 当您重新加载3次中的1次时,将出现错误 .

哦,如此专业的“修复”如下:

<script>
    window.uneffedTimeout = window.setTimeout;
</script>

<!-- The polyfills js is generated during the build process -->
<script src="build/polyfills.js"></script>

<script>
    window.setTimeout = window.uneffedTimeout;
</script>

所以我的问题:

有没有办法实现这一点,适用于精神病院以外的人?

Edit

由于我最初的盐驱动解释并不准确,所以我要澄清一下:

错误没有发生,因为我在我的代码中调用了setTimeout . 当页面加载时,角度的角度和/或离子添加到引擎盖下 . 我不能改变这个呼叫发生的事实,也不能合理地改变呼叫的方式 .

似乎发生的情况是,生成的polyfill只是修补了浏览器提供的setTimeout方法和它自己的实现 . 此实现要么是错误的,要么与代码的其他部分不兼容 .

事实证明,如果我们只是将setTimeout恢复到polyfill之前的状态,那么一切正常 .

现在我们想要的是polyfill要么给我们一个setTimeout的功能实现,要么根本不弄乱它 . “修复”以稍微糟糕的方式完成了后来的工作 . 我宁愿有一个解决方案,不需要我在运行时修复损坏的组件 .

2 回答

  • 0
    setTimeout(() => {
             someFunction();
            }, 500);
    
  • 0

    离子项目中的这种内部错误通常是由于组件版本之间的不兼容 . 您可能必须升级或降级其中一个 . 并确保您使用的是稳定版本,其发布日期不会太长 . 使用 ionic start 启动一个新的空白项目,并记下其中package.json中使用的版本 .

    例如,昨天让我的项目在家里运行我不得不用 npm install -g ionic-cli@3.9.2 将我的ionic-cli降级到v3.9.2并将我的node.js降级到v8.9.4 . 在Mac和Linux中,您可以使用NVM(节点版本管理器),它允许您在不同节点版本之间快速切换 . 记得要调用 npm rebuild 或只删除你的node_modules文件夹 . 经常我需要使用 npm rebuild node-sass --force .

相关问题