2017-08-21 6 views
0

Wir verwenden:Ionic 3: Fehler SetTimeout

  • Ionic Framework: 3.6.0
  • Ionic Nativ:^2.2.6
  • Ionic App Scripts: 2.1.4
  • Angular Kern: 4.3.5
  • Angular Compiler CLI: 4.3.5
  • Knoten: 6.11.2

(Wir gingen auch zu node_modules/@ ionische/app-Skripte und aktualisiert ws bis 1.1.4 (Wie Sie tun -_-))

wenn ionische dienen tun bekommen wir diesen Fehler:

Runtime Fehler

macroTask 'setTimeout': kann nicht in 'running' übergehen, erwartet Zustand 'geplant', war 'notScheduled'.

Wir haben versucht, alles mit veraltet zu aktualisieren, was so ziemlich alles ist, was alle Ratschläge zu diesem Thema finden. Der Fehler ist manchmal noch vorhanden. Wenn Sie 1 von 3 Mal neu laden, wird der Fehler angezeigt.

Die ach so professionell „fix“ ist wie folgt: meine Frage

<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> 

So:

Gibt es eine Möglichkeit, dies zu erreichen, die Menschen außerhalb von psychiatrischen Einrichtungen anwendbar ist?

bearbeiten

Da mein anfängliches Salz getankt Erklärung nicht so genau war, wie es mir hätte sein sollen, lassen Sie klären:

Der Fehler macht nicht passiert, weil ich setTimeout in meine nennen Code. Winkel- und/oder Ionisationszusätze zum Angular nennen dies unter der Haube, wenn die Seite geladen wird. Ich kann die Tatsache nicht ändern, dass dieser Anruf geschieht, noch kann ich vernünftig ändern, wie der Anruf getätigt wird.

Was scheint zu passieren ist, dass die Polyfill generiert Patches nur die Browser bereitgestellten SetTimeout-Methode mit seiner eigenen Implementierung. Diese Implementierung ist entweder nur fehlerhaft oder funktioniert nicht mit dem anderen Teil des Codes.

Dies wird durch die Tatsache belegt, dass, wenn wir setTimeout einfach zurück zu, wie es war, bevor das Polyfill mit ihm verstimmt, alles funktioniert.

Nun, was wir wollen, ist das Polyfill, um uns entweder eine funktionale Implementierung von setTimeout zu geben oder einfach nicht damit umzugehen. Das "Fix" erledigt das später aber auf sehr beschissene Weise. Ich habe eher eine Lösung, die es mir nicht erfordert, defekte Komponenten zur Laufzeit zu reparieren.

Antwort

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

Vielen Dank für Ihre Antwort. Leider sehe ich nicht, wie das zutrifft. Ich habe meine Frage aktualisiert, um den tatsächlichen Fehler besser zu erklären. Ich rufe setTimeout nicht selbst an. Es passiert irgendwo im Framework. Das Problem läuft darauf hinaus, dass die setTimeout-Methode fehlerhaft vom Polyfill gepatcht wird. – user3240383

0

Solche internen Fehler in Ihrem ionischen Projekt sind normalerweise auf Inkompatibilität zwischen den Versionen Ihrer Komponenten zurückzuführen.Sie müssen wahrscheinlich eines von ihnen upgraden oder downgraden. Und stellen Sie sicher, dass Sie stabile Versionen verwenden, deren Veröffentlichungsdatum nicht zu weit entfernt ist. Starten Sie ein neues leeres Projekt mit ionic start und notieren Sie die Versionen, die in seiner package.json verwendet werden.

Zum Beispiel gestern, um mein Projekt zu Hause laufen zu lassen, musste ich meinen ionic-cli auf v3.9.2 mit npm install -g [email protected] herunterstufen und meine node.js auf v8.9.4 downgraden. Unter Mac und Linux können Sie NVM (Node Versions Manager) verwenden, mit dem Sie schnell zwischen verschiedenen Knotenversionen wechseln können. Denken Sie daran, npm rebuild oder löschen Sie einfach Ihre node_modules-Ordner. Häufig muss ich npm rebuild node-sass --force verwenden.