2016-03-15 3 views
13

У меня есть простой код, который отлично работает в каждом браузере, кроме Internet Explorer 11. Как я могу заставить его работать во всех браузерах?Как выполнить обещания в IE11

Codepen

Спасибо заранее.

'use strict'; 

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

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

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

ie11 не es2015 –

+5

IE11 ни опоры [стрелка функции] (http://caniuse.com/#feat = стрелки-функции), ни [родные обещания] (http://caniuse.com/#feat=promises). Используйте транспилер JS (например, [babel] (https://babeljs.io/)) или не используйте функции ES6. Для поддержки Promise вы можете использовать библиотеку, например [bluebird] (http://bluebirdjs.com/). – Tomalak

+2

(Кстати, обратите внимание, как http://caniuse.com показывает, что этот код также не запускался в некоторых других браузерах, кроме IE11.Иметь привычку проверять, насколько хорошо поддерживается функция JS, CSS или HTML, которую вы хотите использовать .) – Tomalak

ответ

31

Если вы хотите этот типа кода для запуска в IE11 (который не поддерживает большую часть ES6 вообще), то вам необходимо получить библиотеку третьей партии обещания (как Bluebird), включает в себя эту библиотеку и изменения ваше кодирование использует структуры кодирования ES5 (нет функций стрелок, нет let и т. д.), чтобы вы могли жить в пределах того, что поддерживают старые браузеры.

Или вы можете использовать транспилер (например, Babel), чтобы преобразовать код ES6 в код ES5, который будет работать в старых браузерах.

Вот версия вашего кода, написанного в синтаксисе ES5 с 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> 
Смежные вопросы