假设我有一个 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++调用时,我在从 C++拦截这个 JS 异常时遇到问题:Nan::Callback
Call()
Nan::TryCatch tc;
Local<Value> retv = pf->Call( Nan::GetCurrentContext()->Global(), objc-1, &args );
if ( tc.HasCaught() ) {
printf("EXCEPTION:\n");
...
事实上,脚本只是在 JS 错误时退出,我再也没有回来检查tc
,调用返回值 ( retv
) 来处理任何未决的异常。我究竟做错了什么?