资讯专栏INFORMATION COLUMN

而井教你判断当前Javascript运行环境是否支持async函数

hot_pot_Leo / 1748人阅读

摘要:文章起因今天在学习一个的测试框架中,在阅读文档时看到用来判断是否支持函数的代码。

文章起因

今天在学习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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100029.html

相关文章

  • 教你如何检查一个函数是否JavaScript运行环境内建函数

    摘要:但有些时候我们可能需要知道现在某个到底是否为运行时环境所原生支持,还是代码支持的。今天在学习版本的源代码时,就发现了中也有用来检测一个函数是否为运行时原生支持。 在开发过程中,对于某些API在现有的JavaScript运行时环境不支持的时候,我们大都会采用加入polyfill来解决这个问题。但有些时候我们可能需要知道现在某个API到底是否为运行时环境所原生支持,还是polyfill代码...

    miya 评论0 收藏0
  • 分分钟教你用node.js写个爬虫

    摘要:爬虫介绍二爬虫的分类通用网络爬虫全网爬虫爬行对象从一些种子扩充到整个,主要为门户站点搜索引擎和大型服务提供商采集数据。 分分钟教你用node.js写个爬虫 写在前面 十分感谢大家的点赞和关注。其实,这是我第一次在segmentfault上写文章。因为我也是前段时间偶然之间才开始了解和学习爬虫,而且学习node的时间也不是很长。虽然用node做过一些后端的项目,但其实在node和爬虫方面...

    fanux 评论0 收藏0
  • JavaScript引擎是如何工作的?从调用栈到Promise你需要知道的一切

    摘要:最受欢迎的引擎是,在和中使用,用于,以及所使用的。单线程的我们说是单线程的,因为有一个调用栈处理我们的函数。也就是说,如果有其他函数等待执行,函数是不能离开调用栈的。每个异步函数在被送入调用栈之前必须通过回调队列。 翻译:疯狂的技术宅原文:https://www.valentinog.com/bl... 本文首发微信公众号:前端先锋欢迎关注,每天都给你推送新鲜的前端技术文章 sh...

    Simon_Zhou 评论0 收藏0
  • 教你如何在@ViewChild查询之前获取ViewContainerRef

    摘要:使用指令代替查询每一个指令都可以在它的构造器中注入引用。让我们声明这样一个指令我已经在构造器中添加了检查代码来保证视图容器在指令实例化的时候是可用的。 原文:https://blog.angularindepth.c...作者:Max Koretskyi译者:而井 【翻译】教你如何在@ViewChild查询之前获取ViewContainerRef showImg(https://se...

    suxier 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<