如何使承诺在IE11中工作

问题描述:

我有一个简单的代码,除了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 = arrow-functions)和[native Promises](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

如果你想在IE11(不支持多ES6在所有)运行此类型的代码,那么你就需要获得第三方承诺库(如Bluebird),包括图书馆和变化你的代码使用ES5编码结构(没有箭头功能,没有let等),这样你就可以在旧版浏览器支持的范围内生活。

或者,您可以使用转换器(如Babel)将ES6代码转换为适用于旧版浏览器的ES5代码。

这里是你的代码写在ES5语法与蓝鸟承诺库的版本:

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