而井教你判断当前Javascript运行环境是否支持async函数
文章起因
今天在学习Jasmine(一个Javascript的测试框架)中,在阅读文档时看到用来判断是否支持async函数的代码。
// 获取async函数的原型的构造器 function getAsyncCtor() { try { eval("var func = async function(){};"); } catch (e) { return null; } return Object.getPrototypeOf(func).constructor; } // 如果getAsyncCtor() 结果为null,说明运行时不支持async函数 function browserHasAsyncAwaitSupport() { return getAsyncCtor() !== null; }
让我们简化代码,基于上面的代码我们可以将其合并成为一个函数
function isAsyncAwaitSupport() { let func; try { eval("func = async function(){};"); } catch (e) { return false; } // 由于async函数的构造器不是全局对象,所以我们需要由下面代码来获取async函数的构造器 // 具体可以查看以下MDN上有关于AsyncFunction的说明, // 地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction return Object.getPrototypeOf(func).constructor != null; }
npm上其实已经有了一个库用来判断运行时是否支持async/await了,叫is-async-supported
,但是因为依赖着nodejs
平台的vm
内置库,无法运行在非nodejs平台。以下是它的代码:
const vm = require('vm') module.exports = function checkAsyncAwait () { try { new vm.Script('(async () => ({}))()') return true } catch (e) { return false } }
is-async-await-supported
而我们刚才编写的函数不依赖于nodejs平台,所以可以运行在任意JavaScript运行时中,比is-async-supported
库更加通用。
目前我已经将这个模块发布到npm
上面去了,名字叫is-async-await-supported
,代码采用TypeScript
编写,已经通过webpack
转义成了UMD
模块和ES6模块,你可以在浏览器和nodejs中使用它,你只需通过下述命令安装即可,目前使用文档已经更新好了,使用是否简单,你只需照着文档做就可以了。
文档地址:https://www.npmjs.com/package...
npm install --save is-async-await-supported
相关推荐
Bonrui编程路 2020-06-07
89500297 2020-06-07
陈旭阳 2020-06-02
前端开发Kingcean 2020-05-29
niehanmin 2020-05-19
Magicsoftware 2020-03-28
Magicsoftware 2020-03-28
LorenLiu 2020-03-28
lyg0 2020-02-18
88520191 2020-01-30
前端开发Kingcean 2020-01-23
csuzxm000 2020-01-10
whynotgonow 2020-01-05
89500297 2020-01-03
88520191 2019-12-30
Trustport 2019-12-16
wujiajax 2014-01-13