2016-03-15 27 views
13

Ho un codice semplice che funziona perfettamente su tutti i browser ad eccezione di Internet Explorer 11. Come posso farlo funzionare su tutti i browser?Come far funzionare le promesse in IE11

Codepen

Grazie in anticipo.

'use strict'; 

let promise = new Promise((resolve, reject) => { 

    setTimeout(() => { 
    resolve("result"); 
    }, 1000); 
}); 

promise 
    .then(
    result => { 
     alert("Fulfilled: " + result); 
    }, 
    error => { 
     alert("Rejected: " + error); 
    } 
); 
+2

ie11 non ha es2015 –

+5

IE11 né supporti [funzioni direzionali] (http://caniuse.com/#feat = funzioni-freccia) né [Promesse native] (http://caniuse.com/#feat=promises). Utilizzare un transpiler JS (come [babel] (https://babeljs.io/)) o non utilizzare le funzionalità ES6. Per il supporto Promise è possibile utilizzare una libreria come [bluebird] (http://bluebirdjs.com/). – Tomalak

+2

(BTW, nota come http://caniuse.com mostra che questo codice non verrebbe eseguito anche in altri browser rispetto a IE11. Prendi l'abitudine di controllare in che modo una funzionalità JS, CSS o HTML ben supportata che desideri utilizzare è .) – Tomalak

risposta

31

Se si desidera che questo tipo di codice per l'esecuzione in IE11 (che non supporta gran parte ES6 a tutti), allora avete bisogno di ottenere una libreria di terze parti promessa (come Bluebird), includere tale biblioteca e il cambiamento la codifica per utilizzare le strutture di codifica ES5 (nessuna funzione di freccia, n. let, ecc.) in modo da poter vivere entro i limiti di ciò che i vecchi browser supportano.

Oppure, è possibile utilizzare un transpiler (come Babel) per convertire il codice ES6 in codice ES5 che funzionerà con i browser più vecchi.

Ecco una versione del codice scritto in sintassi ES5 con la libreria promessa Bluebird:

<script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js"></script> 

<script> 

'use strict'; 

var promise = new Promise(function(resolve) { 
    setTimeout(function() { 
     resolve("result"); 
    }, 1000); 
}); 

promise.then(function(result) { 
    alert("Fulfilled: " + result); 
}, function(error) { 
    alert("Rejected: " + error); 
}); 

</script> 
Problemi correlati