大綱
- Deno內部異常處理
- Deno模塊機制,import實現
Deno內部異常處理
Deno中異常處理主要分為三步,如圖1。
- 捕獲V8異常
- 解析異常信息
- 打印異常信息
捕獲異常
之前的幾篇文章中已經分析過,Deno內部嵌入了V8引擎去執行JavaScript代碼,那麼當V8執行JavaScript代碼出現異常是如何捕獲的呢?
當然是依靠V8引擎自身提供的機制,熟悉V8引擎的同學應該清楚,V8暴露了TryCatch API。通過該API,可以捕獲到V8編譯和執行異常。在Deno中,對V8的TryCatch API進行了封裝。具體代碼2.
處理封裝異常信息
捕獲到V8異常後,可以通過圖3中的代碼獲取V8拋出的異常,然後對異常信息進行處理。
圖4為Rust異常信息對象,從V8獲取到異常信息之後,會解析異常信息,然後封裝成Rust對象。
打印異常信息
Deno後端會把Rust異常對象序列化,然後打印在命令行,形式如圖5。
Deno模塊機制,import實現
<code>import { serve } from "https://deno.land/[email protected]/http/server.ts";/<code>
如上,當V8引擎執行代碼時遇到import關鍵字,會去調用SetHostImportModuleDynamicallyCallback方法指定的回調函數。SetHostImportModuleDynamicallyCallback方法代碼如圖6,該方法是V8引擎自帶的一個方法,可以用來自定義import關鍵字的行為。
在Deno初始化時,會去執行SetHostImportModuleDynamicallyCallback方法,為import關鍵字指定需要執行的回調函數。
<code>isolate.set_host_import_module_dynamically_callback(
bindings::host_import_module_dynamically_callback,
);/<code>
bindings::host_import_module_dynamically_callback方法是Deno中通過Rust實現的,用來加載對應的模塊,然後返回給V8執行。
到此,Deno內部異常處理,以及Import模塊實現原理分析完成。
閱讀更多 城東的花開了 的文章
關鍵字: 異常 JavaScript Rust