2016-02-06 27 views
9

Sono nuovo su Promises su javascript quindi spero che alcuni possano aiutarmi con questo problema.Promesse non funzionanti su IE11

Problema: Promessa non essere eseguire su IE11, funziona bene su Chrome e Firefox

Frameworks utilizzati: Ho provato ad utilizzare ES6-promise.d.ts e bluebird.d.ts stesso risultato.

Codice:

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

Risultati: su Chrome e Firefox posso vedere tutti i log, ma su IE11 vedo solo "Inside executeSomething", che significa che il problema è durante la creazione della promessa.

Ho pensato che fosse perché IE11 non supporta es6 ma ottengo lo stesso risultato usando bluebird, spero che alcuni possano portare un po 'di luce al mio problema.

+1

IE11 non supporta le promesse di es6. https://kangax.github.io/compat-table/es6/#ie11 – jib

risposta

6

è necessario includere un polyfill promessa nella tua pagina per IE11 al lavoro.

vostro istinto di utilizzare ES-promessa è corretto, ma è necessario includere anche il file .js nel tuo html

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

Il file .d.ts darà il compilatore dattiloscritto è definizioni, ma non influisce runtime. Devi ancora includere il polyfill nel tuo html perché possa essere effettivamente eseguito nel browser.

La cosa più importante da ricordare quando si utilizza macchina o qualsiasi linguaggio compilato è la differenza tra compilazione tempo e run tempo.

.d.ts, .ts, .tsx, ecc sono tutti compilare file tempo. Ciò significa che questi non sono i file che vengono effettivamente eseguiti, ma i file che generano il codice di runtime.

.js file sono i file di runtime . Questi sono i file che vengono eseguiti dal browser.

.d.ts file fanno non contengono il codice, ma invece una definizione di firma del codice e, pertanto, dovrebbero sempre essere accompagnate da una corrispondente .js file che verrà eseguito nel browser.

+0

es6-promise è un terribile polyfill promesso per quello che vale. –

+0

Grazie !!! questo accade solo su IE, non so perché, ma l'aggiunta del riferimento ha risolto il mio problema. – Moy

+0

@BenjaminGruenbaum, hai un suggerimento per un miglior polyfill? – bnieland