2016-02-06 16 views
9

Ich bin neu bei Promises auf Javascript, also hoffe ich, dass einige mir mit diesem Problem helfen können.Promises funktioniert nicht auf IE11

Problem: Versprechen nicht auf IE11 auszuführen ist, funktioniert auf Chrome und FireFox

Frameworks verwendet: Ich versuchte es6-promise.d.ts und bluebird.d.ts gleiche Ergebnis mit.

Code:

static executeSomething(): Promise<any> 
{ 
    console.log("inside executeSomething"); 
    var test= new Promise((resolve, reject)=> 
    { 
    console.log("inside Promise"); 

    }).catch(function(error){console.log("error")}); 
console.log("after promise"); 
return test;  
} 

Ergebnisse: auf Chrom und Firefox ich alle Protokolle sehen können, aber auf IE11 Ich sehe nur „Inside executeSomething“, die das Problem bedeutet, während das Versprechen zu schaffen.

Ich dachte, es war, weil IE11 Es6 nicht unterstützt, aber ich bekomme das gleiche Ergebnis mit Bluebird, ich hoffe, einige können etwas Licht zu meinem Problem bringen.

+1

IE11 unterstützt es6 Versprechen nicht. https://kangax.github.io/compat-table/es6/#ie11 – jib

Antwort

6

Sie müssen ein Versprechen Polyfill in Ihrer Seite für IE11 zu arbeiten.

Ihr Instinkt es-Versprechen zu verwenden ist richtig, aber Sie müssen auch die .js Datei in Ihrem html enthalten

<script src="path/to/es6-promise.js"></script> 

Die .d.ts Datei wird das Typoskript Compiler es Definitionen geben, aber keine Laufzeit beeinflussen. Sie müssen das Polyfill dennoch in Ihren HTML-Code einfügen, damit es tatsächlich im Browser ausgeführt werden kann.

Die größte Sache zu erinnern, wenn Typoskript mit oder eine kompilierte Sprache ist der Unterschied zwischen Zeit und Lauf Zeit kompilieren.

.d.ts, .ts, .tsx usw. Sind alle Zeitdateien kompilieren. Dies bedeutet, dass dies nicht die Dateien sind, die tatsächlich ausgeführt werden, sondern die Dateien, die den Laufzeitcode generieren.

.js Dateien sind die Laufzeit Dateien. Dies sind die Dateien, die vom Browser ausgeführt werden.

.d.ts Dateien tun nicht Code enthalten, sondern eine Definition der Unterschrift des Code und soll daher immer mit einer entsprechenden .js Datei beigefügt werden, die im Browser ausgeführt wird.

+0

es6-versprechen ist ein schreckliches Versprechen polyfill für das, was es wert ist. –

+0

Danke !!! Dies passiert nur bei IE nicht sicher, warum, aber das Hinzufügen der Referenz löste mein Problem. – Moy

+0

@BenjaminGruenbaum, hast du einen Vorschlag für eine bessere Polyfill? – bnieland

Verwandte Themen