web-dev-qa-db-ja.com

Promiseがブラウザーでサポートされているかどうかを確認する方法

Promise機能がブラウザで有効になっているかどうかを検出する方法がある場合、Modernizrを使用して、またはそれ以外を使用して誰でも知っていますか?

機能のポリフィルがありますが、ブラウザにネイティブ実装がない場合にのみ適用します。

29
user2836501

2016年12月11日更新:ブラウザのすべての常緑バージョンがpromiseをサポートするようになりました。安全に使用できます。


pdate Nov 14-2016: Chrome、Firefox、Safari、およびIEはすべて、開発チャンネルでpromiseの実験的サポートを提供しています。仕様は確定しました。まだ実装に依存しており、ライブラリを使用しますが、これは数か月後に変更される可能性があります。


信頼できる方法でネイティブに約束をサポートしているブラウザーはありません。仕様が変更される可能性があります-少なくともあと数か月間。私の提案は、Bluebirdのような高速なpromiseライブラリを使用することです。

ネイティブプロミスが有効になっているかどうかを確認する場合は、次の操作を実行できます。

_if(typeof Promise !== "undefined" && Promise.toString().indexOf("[native code]") !== -1){
    //here
}
_

他の人が示唆したように、Promiseオブジェクトがあるかどうかを確認することはif(Promise)で行うことができますが、約束の作成などのAPIが異なるライブラリがあるため、これに対して強くお勧めします。

36

そんなに早くない。

これスロー「約束」が未定義の場合:

if (Promise)
  // do code

これnever throws:

if (window.Promise)
  // do code

はい、ブラウザ環境でウィンドウオブジェクトを信頼できます。

13
Jason Sebring

try/catchブロックで作成を試みることができます:

var promiseSupport = false;
try {
    var promise = new Promise(function (x, y) {});
    promiseSupport = true;
} catch (e) {}

promiseSupportをチェックして、失敗するかどうかを確認します。

JSFiddle

3
War10ck

オブジェクト参照を持ち越さずに「サポート」フラグを作成するには:

var canPromise = !! window.Promise;
2
Paul Roub

以下は、Promiseのブラウザーおよびランタイムサポートをリストするページです。 https://kangax.github.io/compat-table/es6/

0
Michael Franzl