我们正在使用:
-
离子框架: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 回答
离子项目中的这种内部错误通常是由于组件版本之间的不兼容 . 您可能必须升级或降级其中一个 . 并确保您使用的是稳定版本,其发布日期不会太长 . 使用
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
.