簡體   English   中英

Nan :: TryCatch不會攔截JS代碼中Nan :: Callback中引發的異常

[英]Nan::TryCatch will not intercept exception thrown in Nan::Callback from JS code

可以說我有一個JS函數,它只是拋出一個錯誤:

function() { throw "Danger, Will Robinson!"; }

此函數作為參數傳遞給node.js插件,並用於構造Nan :: Callback(應注意使該句柄持久化):

// get handle to JS function and its Tcl name Handle<Function> fun = Handle<Function>::Cast( info[0] ); Nan::Callback *pf = new Nan::Callback(fun);

當用C ++的Call() Nan::Callback時,我在從C ++ 攔截此JS異常時遇到問題:

Nan::TryCatch tc; Local<Value> retv = pf->Call( Nan::GetCurrentContext()->Global(), objc-1, &args ); if ( tc.HasCaught() ) { printf("EXCEPTION:\\n"); ...

實際上,腳本只是在JS錯誤時退出,而我再也沒有回過頭來檢查tc ,並且調用返回值( retv )是否有任何未決異常。 我究竟做錯了什么?

發現它,這很可能是已知的Nan bug 7月27日引用hankbao的評論:

我剛遇到一個相關的問題。 我們目前正在使用電子包裝我們的網絡應用程序。 有一個本機節點插件,可為電子應用程序提供一些功能。 我們的網絡應用程序將調用插件,並向其傳遞js回調。 本機插件將回調存儲在NanCallback中。 它將在調用回調之前設置TryCatch。 但是,TryCatch始終無法捕獲js回調引發的異常 事實證明,如果我使用Function :: Call而不是NanCallback :: Call()調用回調,則可以捕獲異常

基於這個提示,我解決問題 :我用v8::Persistent<Function>替換了Nan::Callback的函數句柄,並最終使TryCatch正常工作。 唯一要注意的是:不使用Nan意味着代碼很容易中斷,因為隨着時間的推移v8並不是完全穩定的API :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM