wake-up-neo.com

Versprechen Polyfill zu ES6 hinzufügen

Ich habe ein React-Projekt in ES6 geschrieben. Es wird mit Babel kompiliert und funktioniert sehr gut. Bis auf ein Versprechen (von vielen!), Das nur in IE auftritt, was ich bereits kenne - hat keine Unterstützung für Versprechen. Also dachte ich sofort daran, ein Polyfill hinzuzufügen, um Versprechen für IE zu liefern, aber dann dachte ich: "Warte, du schreibst bereits ES6 und ist das nicht in ES5 kompiliert?" Wer würde es besser wissen als SO?
Ist es sinnvoll, ein Polyfill wie es6-promise zu meinem Projekt hinzuzufügen? Und wenn ja, wie sollte ich es syntaktisch verwenden? Im Moment habe ich nur den Import, aber sollte ich ihn wahrscheinlich auch irgendwie implementieren?

import Promise from 'es6-promise';

Hier ist auch das Versprechen, das Probleme im IE verursacht. Vielleicht habe ich einen Syntaxfehler, den ich selbst nicht bemerkt habe! :)

new SingleObjectResource(DJ_CONST.API.setLanguage)
    .put(null, {language_code: theLanguage})
    .then(
        function() {
            window.location.reload();
        }
    );
14
makaveli

Ich hatte die gleiche Situation und war sehr frustriert, da ich die Produktions-App bereitstellen musste. Das Problem, das ich hatte, war mit Promises von Fetchjs. Dies ist, was ich mache, um mein Leben zu retten

npm install --save es6-promise //first install as a dependency & then added in broswerify as dependency.

und dann in meiner Haupt-JS-Datei nannte justed dies 

   import "es6-promise/auto";

ab hier https://github.com/stefanpenner/es6-promise#auto-polyfill

im Grunde seine alternative Syntax von 

require('es6-promise').polyfill();

Unter der Haube Die Methode polyfill () fügt beim Aufruf die globale Umgebung (in diesem Fall auf den Promise-Namen) ein.

Note: Ich habe gulp mit browserify verwendet. 

11
Danish

Obwohl Sie Babel verwenden (nur nachträglich einbauen und keine Funktionalität hinzufügen), sind Polyfills erforderlich. 

Alles was Sie tun müssen, ist das Paket zu installieren: 

npm install --save es6-promise

Inside webpack.config.js (oder wo auch immer sich Ihre Webpack-Konfigurationen befinden, vorausgesetzt, Sie verwenden Webpack) 

require('es6-promise').polyfill();

Bei der polyfill () -Methode wird die globale Umgebung (in diesem Fall auf den Promise-Namen) gepatcht, wenn sie aufgerufen wird. Mehr Infos unter https://github.com/stefanpenner/es6-promise

1
tomericco

Ich konnte meine vorherige Antwort nicht früher bearbeiten, da ich den Bewertungskommentar in der Nacht, als ich offline war, erhielt. Ich habe meine Antwort mit eingebetteten Informationen per Bewertungsfeed veröffentlicht. Vielen Dank.

Warum nicht bluebird überall verwenden? Seine schneller als die einheimischen Versprechen . Und Polyfills für IE auch. Und ich arbeite nicht für sie :).

EDIT:

Bluebird statt nativen Versprechens verwenden -

const Promise = require('bluebird');

1. Perf Vergleiche hinzugefügt -

results for 10000 parallel executions, 1 ms per I/O op

file                                     time(ms)  memory(MB)
callbacks-baseline.js                         232       35.86
promises-bluebird-generator.js                235       38.04
promises-bluebird.js                          335       52.08
promises-cujojs-when.js                       405       75.77
promises-tildeio-rsvp.js                      468       87.56
promises-dfilatov-vow.js                      578      125.98
callbacks-caolan-async-waterfall.js           634       88.64
promises-lvivski-davy.js                      653      109.64
promises-calvinmetcalf-lie.js                 732      165.41
promises-obvious-kew.js                      1346      261.69
promises-ecmascript6-native.js               1348      189.29
generators-tj-co.js                          1419      164.03
promises-then-promise.js                     1571      294.45
promises-medikoo-deferred.js                 2091      262.18
observables-Reactive-Extensions-RxJS.js      3201      356.76
observables-caolan-highland.js               7429      616.78
promises-kriskowal-q.js                      9952      694.23
observables-baconjs-bacon.js.js             25805      885.55

Platform info:
Windows_NT 6.1.7601 x64
Node.JS 1.1.0
V8 4.1.0.14
Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz × 4

2. IE Polyfill-Code - 

import Bluebird from 'bluebird';
// Node
global.Promise = Bluebird;
// Browser
window.Promise = Bluebird;
1
hazardous