В качестве заголовка, как я могу обнаружить поддержку async/await es7 в браузере?
Это возможно?
В качестве заголовка, как я могу обнаружить поддержку async/await es7 в браузере?
Это возможно?
Как и любой другой синтаксический признак, он должен быть оценен, чтобы быть обнаруженным. Поскольку eval
можно ограничить, это может быть невозможно, если CSP включен:
let isAsync = true;
try {
eval('async () => {}');
} catch (e) {
if (e instanceof SyntaxError)
isAsync = false;
else
throw e; // throws CSP error
}
Если есть вероятность, что целевые браузеры не поддерживают функцию, код следует транспилировать.
Альтернативой, которая позволяет избежать ограничений CSP для eval
, является использование внешнего скрипта для обнаружения синтаксических функций, как описано здесь.
В настоящее время для этого нет идеального решения, но это можно сделать с помощью eval
:
let isAsyncSupported;
try {
isAsyncSupported = eval(`typeof Object.getPrototypeOf(async function() {}).constructor === 'function'`);
} catch (exception) {
isAsyncSupported = false;
}
Подробнее см.:
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