Hinzufügen Versprechen polyfill für ES6
Ich habe eine Reagieren-Projekt geschrieben in ES6. Es ist kompiliert mit Babel und funktioniert Recht gut. Außer für ein Versprechen (von vielen!) das wirkt nur im IE, für die ich schon weiß - hat keine Unterstützung für verspricht. Also dachte ich sofort an fügen Sie ein polyfill zu liefern verspricht für den IE, aber dann dachte ich mir "Halten, sind Sie schon schreiben ES6 und nicht kompiliert in ES5 überhaupt?" Wer wüsste besser als SO?
So gibt es keinen Sinn bei hinzufügen eines polyfill wie es6-Versprechen zu meinem Projekt? Und wenn es ist, wie soll ich es syntaktisch? Für jetzt habe ich nur noch das importieren, aber ich sollte wohl implementieren, die es irgendwie als gut?
import Promise from 'es6-promise';
Auch hier ist das Versprechen, dass die Ursachen der Probleme im IE, vielleicht habe ich einen syntax-Fehler, den ich noch nicht bemerkt mich! 🙂
new SingleObjectResource(DJ_CONST.API.setLanguage)
.put(null, {language_code: theLanguage})
.then(
function() {
window.location.reload();
}
);
- Babel nur transpiles die Funktionen der Sprache zu ES5. Müssen Sie noch polyfills 🙂 Einfach fallen lassen, der an der Oberseite Ihrer Seiten, Mach dir keine sorgen über
import
ing nichts, nur zu schreiben das ES6, wie es war nativ verfügbar - es6-Versprechen ist eine langsame und ziemlich veraltet polyfill, soweit ich weiß.
- RGraham, ich werde es ausprobieren, erste chance, die ich bekommen, aber es scheint schon, dass Sie es geschafft haben, erfassen Sie die Antwort, die ich erwartet, in nur zwei Sätzen. Danke!!!
- Warum nicht bluebird überall? Seine schneller als die der einheimischen verspricht. Und polyfills für IE zu. Und ich arbeite nicht für Sie :).
- Ist
SingleObjectResource
etwas, was Sie gemacht, oder ein 3rd-party-Bibliothek? Sind Sie immer eine Art von Fehler in der Konsole? Wenn nicht, versuchen Sie, ein.catch(function (error) { console.log(error); })
nach Ihrem.then()
. SingleObjectResource
ist Teil einer library. Nun, dass ich babel-polyfill für mein Projekt, ist also immer noch nicht funktioniert und ich erhalte eineunhandled promise rejection error
im IE-Konsole. Keine Ahnung, ob es war es, bevor hinzufügen von babel aber. Es erschien nur nach einiger Wartezeit, nicht sofort. Jedenfalls - sollte ich importieren, das polyfill in die Datei, die enthält dieSingleObjectResource
oder in der Datei, die die Funktion aufruft, enthält dieSingleObjectResource
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich die gleiche situation & war sehr frustriert, als ich hatte zum bereitstellen von Produktions-app, das problem, Das ich hatte, war mit dem Versprechen von fetchjs. Dies ist, was ich tun, um mein Leben zu retten
und dann in meiner main JS-Datei, möchte nannten diese
als von hier aus https://github.com/stefanpenner/es6-promise#auto-polyfill
grundsätzlich seine alternativen syntax von
Grundsätzlich Unter der Haube Der polyfill () - Methode wird der patch auf die Globale Umwelt (in diesem Fall, um das Versprechen Namen), wenn Sie aufgerufen.
Hinweis: ich war mit gulp mit browserify.
Konnte ich nicht Bearbeiten meiner vorherigen Antwort früher, als erhielt ich die abgeben Kommentar in der Nacht, als ich offline war... re-posting auf meine Antwort mit eingebetteten Informationen für den review-feedback. Danke.
Warum nicht bluebird überall? Seine schneller als die der einheimischen verspricht. Und polyfills für den IE zu. Und ich arbeite nicht für Sie :).
EDIT:
Mit bluebird anstelle der nativen Versprechen -
1. Hinzugefügt perf Vergleiche -
2. IE Polyfill-code -
es6-promise
wie ich war, die Planung am Anfang, dann ist dein post hätte viel mehr Relevanz, daes6-promise
ist eine separate Bibliothek. Aber deinem ersten post definitiv gescheitert zu liefern, wie Sie genau umzusetzen, bluebird, es wies darauf hin, dass es ein guter Ersatz füres6-promise
- diese Bemerkung würde besser passen in einen Kommentar, denke ich.const Promise = require('bluebird');
Obwohl Sie mit Babel (nur traspiling und nicht das hinzufügen von Funktionen), polyfills benötigt werden.
Alles, was Sie tun müssen, ist installieren Sie das Paket:
Innen
webpack.config.js
(oder wo auch immer Ihr webpack Konfigurationen sind, vorausgesetzt, Sie sind mit webpack)Den polyfill () - Methode wird der patch auf die Globale Umwelt (in diesem Fall, um das Versprechen Namen), wenn Sie aufgerufen. Mehr Infos unter https://github.com/stefanpenner/es6-promise
import
notation. Ich habe auch ein ES6-Projekt, aber ich Schreibe immer noch diese Linie als ES5.