成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

而井教你判斷當(dāng)前Javascript運(yùn)行環(huán)境是否支持async函數(shù)

hot_pot_Leo / 1858人閱讀

摘要:文章起因今天在學(xué)習(xí)一個(gè)的測(cè)試框架中,在閱讀文檔時(shí)看到用來判斷是否支持函數(shù)的代碼。

文章起因

今天在學(xué)習(xí)Jasmine(一個(gè)Javascript的測(cè)試框架)中,在閱讀文檔時(shí)看到用來判斷是否支持async函數(shù)的代碼。

// 獲取async函數(shù)的原型的構(gòu)造器
function getAsyncCtor() {
    try {
      eval("var func = async function(){};");
    } catch (e) {
      return null;
    }
    return Object.getPrototypeOf(func).constructor;
  }
 // 如果getAsyncCtor() 結(jié)果為null,說明運(yùn)行時(shí)不支持async函數(shù)
  function browserHasAsyncAwaitSupport() {
    return getAsyncCtor() !== null;
  }

讓我們簡(jiǎn)化代碼,基于上面的代碼我們可以將其合并成為一個(gè)函數(shù)

function isAsyncAwaitSupport() {
    let func;
    try {
        eval("func = async function(){};");
    } catch (e) {
        return false;
    }
      // 由于async函數(shù)的構(gòu)造器不是全局對(duì)象,所以我們需要由下面代碼來獲取async函數(shù)的構(gòu)造器
     // 具體可以查看以下MDN上有關(guān)于AsyncFunction的說明,
     // 地址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction
   return Object.getPrototypeOf(func).constructor != null;
}

npm上其實(shí)已經(jīng)有了一個(gè)庫(kù)用來判斷運(yùn)行時(shí)是否支持async/await了,叫is-async-supported,但是因?yàn)橐蕾囍?b>nodejs平臺(tái)的vm內(nèi)置庫(kù),無(wú)法運(yùn)行在非nodejs平臺(tái)。以下是它的代碼:

const vm = require("vm")

module.exports = function checkAsyncAwait () {
  try {
    new vm.Script("(async () => ({}))()")
    return true
  } catch (e) {
    return false
  }
}
is-async-await-supported

而我們剛才編寫的函數(shù)不依賴于nodejs平臺(tái),所以可以運(yùn)行在任意JavaScript運(yùn)行時(shí)中,比is-async-supported庫(kù)更加通用。
目前我已經(jīng)將這個(gè)模塊發(fā)布到npm上面去了,名字叫is-async-await-supported,代碼采用TypeScript編寫,已經(jīng)通過webpack轉(zhuǎn)義成了UMD模塊和ES6模塊,你可以在瀏覽器和nodejs中使用它,你只需通過下述命令安裝即可,目前使用文檔已經(jīng)更新好了,使用是否簡(jiǎn)單,你只需照著文檔做就可以了。
文檔地址:https://www.npmjs.com/package...

npm install --save is-async-await-supported

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/100029.html

相關(guān)文章

  • 教你如何檢查一個(gè)函數(shù)是否JavaScript運(yùn)行時(shí)環(huán)境內(nèi)建函數(shù)

    摘要:但有些時(shí)候我們可能需要知道現(xiàn)在某個(gè)到底是否為運(yùn)行時(shí)環(huán)境所原生支持,還是代碼支持的。今天在學(xué)習(xí)版本的源代碼時(shí),就發(fā)現(xiàn)了中也有用來檢測(cè)一個(gè)函數(shù)是否為運(yùn)行時(shí)原生支持。 在開發(fā)過程中,對(duì)于某些API在現(xiàn)有的JavaScript運(yùn)行時(shí)環(huán)境不支持的時(shí)候,我們大都會(huì)采用加入polyfill來解決這個(gè)問題。但有些時(shí)候我們可能需要知道現(xiàn)在某個(gè)API到底是否為運(yùn)行時(shí)環(huán)境所原生支持,還是polyfill代碼...

    miya 評(píng)論0 收藏0
  • 分分鐘教你用node.js寫個(gè)爬蟲

    摘要:爬蟲介紹二爬蟲的分類通用網(wǎng)絡(luò)爬蟲全網(wǎng)爬蟲爬行對(duì)象從一些種子擴(kuò)充到整個(gè),主要為門戶站點(diǎn)搜索引擎和大型服務(wù)提供商采集數(shù)據(jù)。 分分鐘教你用node.js寫個(gè)爬蟲 寫在前面 十分感謝大家的點(diǎn)贊和關(guān)注。其實(shí),這是我第一次在segmentfault上寫文章。因?yàn)槲乙彩乔岸螘r(shí)間偶然之間才開始了解和學(xué)習(xí)爬蟲,而且學(xué)習(xí)node的時(shí)間也不是很長(zhǎng)。雖然用node做過一些后端的項(xiàng)目,但其實(shí)在node和爬蟲方面...

    fanux 評(píng)論0 收藏0
  • JavaScript引擎是如何工作的?從調(diào)用棧到Promise你需要知道的一切

    摘要:最受歡迎的引擎是,在和中使用,用于,以及所使用的。單線程的我們說是單線程的,因?yàn)橛幸粋€(gè)調(diào)用棧處理我們的函數(shù)。也就是說,如果有其他函數(shù)等待執(zhí)行,函數(shù)是不能離開調(diào)用棧的。每個(gè)異步函數(shù)在被送入調(diào)用棧之前必須通過回調(diào)隊(duì)列。 翻譯:瘋狂的技術(shù)宅原文:https://www.valentinog.com/bl... 本文首發(fā)微信公眾號(hào):前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 sh...

    Simon_Zhou 評(píng)論0 收藏0
  • 教你如何在@ViewChild查詢之前獲取ViewContainerRef

    摘要:使用指令代替查詢每一個(gè)指令都可以在它的構(gòu)造器中注入引用。讓我們聲明這樣一個(gè)指令我已經(jīng)在構(gòu)造器中添加了檢查代碼來保證視圖容器在指令實(shí)例化的時(shí)候是可用的。 原文:https://blog.angularindepth.c...作者:Max Koretskyi譯者:而井 【翻譯】教你如何在@ViewChild查詢之前獲取ViewContainerRef showImg(https://se...

    suxier 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<