¿Puedo detectar async / await disponible en el navegador?

Como título, ¿cómo puedo detectar el soporte async / await es7 en el navegador?

¿Es eso posible?

Como cualquier otra característica sintáctica, debe ser evaluada para ser detectada. Dado que eval puede ser restringido, esto puede ser imposible cuando CSP está habilitado:

 let isAsync = true; try { eval('async () => {}'); } catch (e) { if (e instanceof SyntaxError) isAsync = false; else throw e; // throws CSP error } 

Si existe la posibilidad de que los navegadores de destino no sean compatibles con una función, el código debe ser transstackdo.

La alternativa que permite evitar las restricciones de CSP en eval es usar un script externo para detectar características sintácticas, como se describe aquí .

Actualmente no hay una solución perfecta para eso, pero se puede hacer usando eval :

 let isAsyncSupported; try { isAsyncSupported = eval(`typeof Object.getPrototypeOf(async function() {}).constructor === 'function'`); } catch (exception) { isAsyncSupported = false; } 

Para más información ver:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function