2016-03-15 26 views
13

Tôi có một mã đơn giản chạy hoàn hảo trên mọi trình duyệt ngoại trừ Internet Explorer 11. Làm thế nào tôi có thể làm cho nó hoạt động trên tất cả các trình duyệt?Làm thế nào để thực hiện lời hứa trong IE11

Codepen

Xin cảm ơn trước.

'use strict'; 

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

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

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

IE11 không có es2015 –

+5

IE11 không hỗ trợ [mũi tên chức năng] (http://caniuse.com/#feat = arrow-functions) cũng không phải [native Promises] (http://caniuse.com/#feat=promises). Sử dụng trình chuyển đổi JS (như [babel] (https://babeljs.io/)) hoặc không sử dụng các tính năng ES6. Để được hỗ trợ Promise, bạn có thể sử dụng thư viện như [bluebird] (http://bluebirdjs.com/). – Tomalak

+2

(BTW, lưu ý cách http://caniuse.com cho thấy mã này cũng sẽ không chạy trong một số trình duyệt khác ngoài IE11. Hãy kiểm tra xem mức độ hỗ trợ của tính năng JS, CSS hoặc HTML mà bạn muốn sử dụng .) – Tomalak

Trả lời

31

Nếu bạn muốn loại mã để chạy trong IE11 (mà không hỗ trợ nhiều ES6 tại tất cả), sau đó bạn cần phải nhận được một thư viện 3 lời hứa bên (như Bluebird), bao gồm thư viện và thay đổi mã hóa của bạn để sử dụng cấu trúc mã hóa ES5 (không có chức năng mũi tên, không có let, v.v ...) để bạn có thể sống trong giới hạn của những gì các trình duyệt cũ hỗ trợ.

Hoặc, bạn có thể sử dụng trình chuyển đổi (như Babel) để chuyển mã ES6 thành mã ES5 sẽ hoạt động trong các trình duyệt cũ hơn.

Dưới đây là một phiên bản của mã của bạn viết bằng cú pháp ES5 với thư viện hứa 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> 
Các vấn đề liên quan