web-dev-qa-db-ja.com

ES6にPromiseポリフィルを追加する

私はReact ES6で記述されたプロジェクトを持っています。これはBabelを使用してコンパイルされ、非常にうまく機能します。IEでのみ機能する1つのプロミス(多数あります!)を除きます。 Promiseはサポートされていません。そのため、すぐにIEのPromiseを提供するためにポリフィルを追加することを考えましたが、「ちょっと待って、あなたはすでにES6を書いていて、それがES5にコンパイルされていませんか?」のようでした。 SOよりも?
es6-promise などのポリフィルをプロジェクトに追加する意味はありますか?そして、もしあるなら、それを構文的にどのように使うべきですか?とりあえずインポートしているだけですが、どうにかして実装する必要があるでしょうか。

import Promise from 'es6-promise';

また、IEで問題を引き起こす可能性のある約束もここにあります。おそらく私が気づいていない構文エラーがあるのです! :)

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

私は同じ状況で、本番アプリをデプロイしなければならなかったので非常にイライラしました。私が抱えていた問題は、fetchjsのPromisesでした。これは私の命を救うために私がすることです

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

そして私のメインJSファイルで、これと呼ばれました

   import "es6-promise/auto";

ここから https://github.com/stefanpenner/es6-promise#auto-polyfill

基本的に、その代替構文

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

基本的に、内部的にpolyfill()メソッドは、呼び出されたときにグローバル環境(この場合はPromise名)にパッチを適用します。

:browserifyでgulpを使用していました。

13
Danish

バベルを使用していますが(機能を追加するのではなく、単にトラスパイルする)、ポリフィルが必要です。

パッケージをインストールするだけです。

npm install --save es6-promise

内側webpack.config.js(または、webpackを使用していると仮定して、webpack構成がどこにあるか)

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

Polyfill()メソッドは、呼び出されたときにグローバル環境(この場合はPromise名)にパッチを適用します。詳細は https://github.com/stefanpenner/es6-promise

1
tomericco

オフラインの夜にレビューコメントを受け取ったため、以前の返信を以前に編集できませんでした...レビューのフィードバックごとに埋め込み情報を含む返信を再投稿しました。ありがとう。

どこでも bluebird を使用しないのはなぜですか?その ネイティブの約束よりも速い 。そして IEのポリフィル も。そして私は彼らのために働きません:).

編集:

ネイティブプロミスの代わりにブルーバードを使用-

const Promise = require('bluebird');

1.パフォーマンス比較を追加-

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ポリフィルコード-

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