摘要:文章起因今天在學(xué)習一個的測試框架中,在閱讀文檔時看到用來判斷是否支持函數(shù)的代碼。
文章起因
今天在學(xué)習Jasmine(一個Javascript的測試框架)中,在閱讀文檔時看到用來判斷是否支持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,說明運行時不支持async函數(shù) function browserHasAsyncAwaitSupport() { return getAsyncCtor() !== null; }
讓我們簡化代碼,基于上面的代碼我們可以將其合并成為一個函數(shù)
function isAsyncAwaitSupport() { let func; try { eval("func = async function(){};"); } catch (e) { return false; } // 由于async函數(shù)的構(gòu)造器不是全局對象,所以我們需要由下面代碼來獲取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上其實已經(jīng)有了一個庫用來判斷運行時是否支持async/await了,叫is-async-supported,但是因為依賴著nodejs平臺的vm內(nèi)置庫,無法運行在非nodejs平臺。以下是它的代碼:
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平臺,所以可以運行在任意JavaScript運行時中,比is-async-supported庫更加通用。
目前我已經(jīng)將這個模塊發(fā)布到npm上面去了,名字叫is-async-await-supported,代碼采用TypeScript編寫,已經(jīng)通過webpack轉(zhuǎn)義成了UMD模塊和ES6模塊,你可以在瀏覽器和nodejs中使用它,你只需通過下述命令安裝即可,目前使用文檔已經(jīng)更新好了,使用是否簡單,你只需照著文檔做就可以了。
文檔地址:https://www.npmjs.com/package...
npm install --save is-async-await-supported
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/100029.html
摘要:但有些時候我們可能需要知道現(xiàn)在某個到底是否為運行時環(huán)境所原生支持,還是代碼支持的。今天在學(xué)習版本的源代碼時,就發(fā)現(xiàn)了中也有用來檢測一個函數(shù)是否為運行時原生支持。 在開發(fā)過程中,對于某些API在現(xiàn)有的JavaScript運行時環(huán)境不支持的時候,我們大都會采用加入polyfill來解決這個問題。但有些時候我們可能需要知道現(xiàn)在某個API到底是否為運行時環(huán)境所原生支持,還是polyfill代碼...
摘要:爬蟲介紹二爬蟲的分類通用網(wǎng)絡(luò)爬蟲全網(wǎng)爬蟲爬行對象從一些種子擴充到整個,主要為門戶站點搜索引擎和大型服務(wù)提供商采集數(shù)據(jù)。 分分鐘教你用node.js寫個爬蟲 寫在前面 十分感謝大家的點贊和關(guān)注。其實,這是我第一次在segmentfault上寫文章。因為我也是前段時間偶然之間才開始了解和學(xué)習爬蟲,而且學(xué)習node的時間也不是很長。雖然用node做過一些后端的項目,但其實在node和爬蟲方面...
摘要:最受歡迎的引擎是,在和中使用,用于,以及所使用的。單線程的我們說是單線程的,因為有一個調(diào)用棧處理我們的函數(shù)。也就是說,如果有其他函數(shù)等待執(zhí)行,函數(shù)是不能離開調(diào)用棧的。每個異步函數(shù)在被送入調(diào)用棧之前必須通過回調(diào)隊列。 翻譯:瘋狂的技術(shù)宅原文:https://www.valentinog.com/bl... 本文首發(fā)微信公眾號:前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 sh...
摘要:使用指令代替查詢每一個指令都可以在它的構(gòu)造器中注入引用。讓我們聲明這樣一個指令我已經(jīng)在構(gòu)造器中添加了檢查代碼來保證視圖容器在指令實例化的時候是可用的。 原文:https://blog.angularindepth.c...作者:Max Koretskyi譯者:而井 【翻譯】教你如何在@ViewChild查詢之前獲取ViewContainerRef showImg(https://se...
閱讀 3073·2021-10-12 10:12
閱讀 1582·2021-09-09 11:39
閱讀 1910·2019-08-30 15:44
閱讀 2354·2019-08-29 15:23
閱讀 2906·2019-08-29 15:18
閱讀 2973·2019-08-29 13:02
閱讀 2698·2019-08-26 18:36
閱讀 747·2019-08-26 12:08