Promise機能がブラウザで有効になっているかどうかを検出する方法がある場合、Modernizrを使用して、またはそれ以外を使用して誰でも知っていますか?
機能のポリフィルがありますが、ブラウザにネイティブ実装がない場合にのみ適用します。
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が異なるライブラリがあるため、これに対して強くお勧めします。
これスロー「約束」が未定義の場合:
if (Promise)
// do code
これnever throws:
if (window.Promise)
// do code
はい、ブラウザ環境でウィンドウオブジェクトを信頼できます。
try/catch
ブロックで作成を試みることができます:
var promiseSupport = false;
try {
var promise = new Promise(function (x, y) {});
promiseSupport = true;
} catch (e) {}
promiseSupport
をチェックして、失敗するかどうかを確認します。
オブジェクト参照を持ち越さずに「サポート」フラグを作成するには:
var canPromise = !! window.Promise;
以下は、Promiseのブラウザーおよびランタイムサポートをリストするページです。 https://kangax.github.io/compat-table/es6/