Ich habe einen einfachen Code, der mit Ausnahme des Internet Explorers 11 in jedem Browser perfekt ausgeführt wird. Wie kann ich dafür sorgen, dass er in allen Browsern funktioniert?
Danke im Voraus.
'use strict';
let promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("result");
}, 1000);
});
promise
.then(
result => {
alert("Fulfilled: " + result);
},
error => {
alert("Rejected: " + error);
}
);
javascript
internet-explorer
promise
Billy Logan
quelle
quelle
Antworten:
Wenn Sie möchten, dass dieser Codetyp in IE11 ausgeführt wird (das ES6 überhaupt nicht unterstützt), müssen Sie eine Versprechen-Bibliothek eines Drittanbieters (wie Bluebird ) erwerben, diese Bibliothek einschließen und Ihre Codierung ändern, um ES5-Codierungsstrukturen zu verwenden (keine Pfeilfunktionen, nein
let
usw.), damit Sie innerhalb der Grenzen dessen leben können, was ältere Browser unterstützen.Sie können auch einen Transpiler (wie Babel ) verwenden, um Ihren ES6-Code in ES5-Code zu konvertieren, der in älteren Browsern funktioniert.
Hier ist eine Version Ihres Codes, der in ES5-Syntax mit der Bluebird-Versprechensbibliothek geschrieben wurde:
<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>
quelle
new Promise()
welche Syntax von jQuery nicht unterstützt wird. Das Gleiche gilt für andere Versprechensbibliotheken wie Q, die mit älteren Browsern kompatibel sind, aber eine eigene, nicht standardmäßige Syntax haben.let
undconst
sind mit ie11 verfügbar, wenn sie nicht in einer for-Schleife verwendet werden. Es ist eines der wenigen es6-Features, die ei11 tatsächlich unterstützt. (mit begrenztenMap
undSet
einigen anderen Merkmalen)Sie können versuchen, eine Polyfüllung zu verwenden. Die folgende Polyfill wurde 2019 veröffentlicht und hat den Trick für mich getan. Es weist dem Fensterobjekt die Promise-Funktion zu.
verwendet wie:
window.Promise
https://www.npmjs.com/package/promise-polyfillWeitere Informationen zu Polyfills finden Sie im folgenden MDN-Webdokument unter https://developer.mozilla.org/en-US/docs/Glossary/Polyfill
quelle