摘要:文章起因今天在學(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
摘要:但有些時(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代碼...
摘要:爬蟲介紹二爬蟲的分類通用網(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和爬蟲方面...
摘要:最受歡迎的引擎是,在和中使用,用于,以及所使用的。單線程的我們說是單線程的,因?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...
摘要:使用指令代替查詢每一個(gè)指令都可以在它的構(gòu)造器中注入引用。讓我們聲明這樣一個(gè)指令我已經(jīng)在構(gòu)造器中添加了檢查代碼來保證視圖容器在指令實(shí)例化的時(shí)候是可用的。 原文:https://blog.angularindepth.c...作者:Max Koretskyi譯者:而井 【翻譯】教你如何在@ViewChild查詢之前獲取ViewContainerRef showImg(https://se...
閱讀 3118·2021-10-12 10:12
閱讀 1635·2021-09-09 11:39
閱讀 1962·2019-08-30 15:44
閱讀 2411·2019-08-29 15:23
閱讀 2949·2019-08-29 15:18
閱讀 3027·2019-08-29 13:02
閱讀 2759·2019-08-26 18:36
閱讀 794·2019-08-26 12:08