我们正在使用:
(我们还去了node_modules / @ ionic / app-scripts并将ws更新为1.1.4(正如你所做的那样) -
在执行 ionic serve 时,我们收到此错误:
运行时错误
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>
所以我的问题:
有没有办法实现这个适用于精神病院以外的人?
修改
由于我最初的盐提供的解释并不准确,所以让我澄清一下:
错误不发生,因为我在 my 代码中调用了setTimeout。当页面加载时,角度的角度和/或离子添加到引擎盖下。 我无法改变这种呼叫发生的事实,也无法合理地改变呼叫的发生方式。
似乎发生的情况是,生成的polyfill只是修补了浏览器提供的setTimeout方法和它自己的实现。这个实现要么是错误的,要么不适用于代码的其他部分。
事实证明,如果我们只是将setTimeout恢复到polyfill之前的状态,那么一切正常。
现在我们想要的是polyfill要么给我们一个setTimeout的功能实现,要么根本不要乱用它。 “修复”以稍微糟糕的方式完成了后来的工作。我宁愿有一个解决方案,不需要我在运行时修复损坏的组件。
答案 0 :(得分:0)
setTimeout(() => {
someFunction();
}, 500);
答案 1 :(得分:0)
离子项目中的此类内部错误通常是由于组件版本之间不兼容。您可能必须升级或降级其中一个。并确保您使用的是稳定版本,其发布日期不会太长。使用ionic start
启动一个新的空白项目,并记下其中使用的版本&packages.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
。
答案 2 :(得分:0)
对于IONIC 3,请使用此
let timeInMs = 5000;
let timeout= setTimeout( () => {
// your code
}, timeInMs );