我可以检测到浏览器中可用的异步/等待吗? [复制]
Posted
技术标签:
【中文标题】我可以检测到浏览器中可用的异步/等待吗? [复制]【英文标题】:Can I detect async/await available in browser? [duplicate] 【发布时间】:2018-02-17 23:59:51 【问题描述】:作为标题,如何检测浏览器中的 async/await es7 支持?
这可能吗?
【问题讨论】:
不完全检测:kangax.github.io/compat-table/esnext 还有:caniuse.com/#search=await async/await 是 ES2017。 【参考方案1】:目前还没有完美的解决方案,但可以使用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
【讨论】:
【参考方案2】:与任何其他句法特征一样,它应该被评估以便被检测到。由于eval
可以被限制,所以在启用 CSP 时这可能是不可能的:
let isAsync = true;
try
eval('async () => ');
catch (e)
if (e instanceof SyntaxError)
isAsync = false;
else
throw e; // throws CSP error
如果目标浏览器可能不支持某个功能,则应转译代码。
允许避免对eval
的 CSP 限制的替代方法是使用外部脚本来检测语法特征,as described here。
【讨论】:
以上是关于我可以检测到浏览器中可用的异步/等待吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如果我不关心它的返回值,我应该等待一个“异步任务”函数吗? [复制]
可以使用 Task.WhenAll(...) 或其他比每次等待更有意义的东西重写此异步/等待代码吗? [复制]