promesas nodejs entre diferencia javascript promise browser-detection es6-promise

javascript - nodejs - Cómo determinar si una promesa es compatible con el navegador



promise typescript (6)

No tan rapido.

Esto se lanza cuando "Promise" no está definido:

if (Promise) // do code

Esto nunca arroja:

if (window.Promise) // do code

y sí, se puede confiar en el objeto de ventana en un entorno de navegador.

¿Alguien sabe, usando Modernizr o de otra manera, si hay una manera de detectar si la función Promesa está habilitada en un navegador?

Tengo un polyfill para la funcionalidad, pero solo quiero aplicarlo si el navegador no tiene una implementación nativa.



Para crear una bandera ''soportada'' sin llevar una referencia de objeto:

var canPromise = !! window.Promise;


Puedes intentar crear uno en un bloque try/catch :

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

Compruebe promiseSupport para ver si falla o no.

JSFiddle


Actualización del 11 de diciembre de 2016: todas las versiones de los navegadores de hoja perenne ahora admiten promesas. Son seguros de usar.

Actualización 14 de noviembre de 2016: Chrome, Firefox, Safari e IE ahora tienen soporte experimental para promesas en sus canales de desarrollo. La especificación se ha establecido. Todavía no confiaría en la implementación todavía y usaría una biblioteca, pero esto podría cambiar en unos pocos meses.

Ningún navegador soporta promesas de forma nativa y confiable. La especificación puede cambiar, al menos por unos meses más. Mi sugerencia es utilizar una biblioteca de promesa rápida como Bluebird.

Si desea comprobar si las promesas nativas están habilitadas, puede hacerlo:

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

Como otros sugirieron, solo se puede verificar si hay un objeto Promise if(Promise) pero lo recomiendo enérgicamente, ya que diferentes bibliotecas tienen diferentes API para la creación de promesas, etc.


if (Promise) { alert("Promise is supported!"); } else { alert("Promise is not supported!"); }