Est-ce que quelqu'un sait, en utilisant Modernizr ou autre, s'il existe un moyen de détecter si la fonction Promise est activée dans un navigateur?
J'ai un polyfill pour la fonctionnalité, mais je veux seulement l'appliquer si le navigateur n'a pas d'implémentation native.
Mise à jour du 11 décembre 2016: Toutes les versions persistantes des navigateurs prennent désormais en charge les promesses. Ils sont sûrs à utiliser.
Mise à jour du 14 novembre 2016: Chrome, Firefox, Safari et IE ont tous maintenant un support expérimental pour les promesses dans leurs canaux de développement. La spécification est réglée. Je ne voudrais toujours pas compter sur l'implémentation pour l'instant et utiliserait une bibliothèque mais cela pourrait changer dans quelques mois.
Aucun navigateur ne prend en charge les promesses de manière native de manière fiable. La spécification pourrait changer - au moins pour quelques mois de plus. Ma suggestion est d'utiliser une bibliothèque de promesses rapides comme Bluebird.
Si vous souhaitez vérifier si les promesses natives sont activées, vous pouvez faire:
if(typeof Promise !== "undefined" && Promise.toString().indexOf("[native code]") !== -1){
//here
}
Comme d'autres l'ont suggéré, vérifier simplement s'il y a un objet Promise
peut être fait par if(Promise)
mais je le suggère fortement car différentes bibliothèques ont différentes API pour la création de promesses, etc.
Ceci lance lorsque "Promise" n'est pas défini:
if (Promise)
// do code
Cette jamais lance:
if (window.Promise)
// do code
et oui, l'objet fenêtre peut être utilisé dans un environnement de navigateur.
Vous pouvez essayer d'en créer un dans un try/catch
bloquer:
var promiseSupport = false;
try {
var promise = new Promise(function (x, y) {});
promiseSupport = true;
} catch (e) {}
Vérifiez promiseSupport
pour voir s'il échoue ou non.
Pour créer un indicateur "pris en charge" sans transporter une référence d'objet:
var canPromise = !! window.Promise;
Voici une page répertoriant le navigateur et le support d'exécution pour Promise: https://kangax.github.io/compat-table/es6/