2016-03-15 9 views
13

Mam prosty kod, który działa idealnie w każdej przeglądarce z wyjątkiem Internet Explorera 11. Jak mogę sprawić, aby działało we wszystkich przeglądarkach?Jak składać obietnice działa w IE11

Codepen

góry dzięki.

'use strict'; 

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

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

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

ie11 nie posiada es2015 –

+5

IE11 nie obsługuje funkcje strzałek [] (http://caniuse.com/#feat = strzałki-funkcje) ani [native Promises] (http://caniuse.com/#feat=promises). Użyj transpilatora JS (np. [Babel] (https://babeljs.io/)) lub nie korzystaj z funkcji ES6. W celu wsparcia obietnicy możesz skorzystać z biblioteki takiej jak [bluebird] (http://bluebirdjs.com/). – Tomalak

+2

(BTW, zauważ, że http://caniuse.com pokazuje, że ten kod nie byłby również uruchamiany w innych przeglądarkach niż IE 11. Zwyczaj sprawdzić, jak dobrze obsługiwana jest funkcja JS, CSS lub HTML, której chcesz użyć .) – Tomalak

Odpowiedz

31

Jeśli chcesz tego rodzaju kodu do uruchomienia w IE11 (która nie obsługuje wiele ES6 w ogóle), a następnie trzeba uzyskać bibliotekę 3rd party obietnicę (jak Bluebird), to, że biblioteka i zmianę kodowanie w celu użycia struktur kodujących ES5 (bez funkcji strzałek, nr let, itp.), dzięki czemu można żyć w granicach obsługiwanych przez starsze przeglądarki.

Można też użyć transpilera (np. Babel), aby przekonwertować kod ES6 na kod ES5, który będzie działał w starszych przeglądarkach.

Oto wersja kodu napisanego w składni ES5 z Bluebird biblioteki Obiecujemy:

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