从C++代码中抛出V8异常的正确方法是什么?< Stime> Ed: >此答案是针对V8的较旧版本。有关当前版本,请参见,javascript,c++,v8,Javascript,C++,V8" /> 从C++代码中抛出V8异常的正确方法是什么?< Stime> Ed: >此答案是针对V8的较旧版本。有关当前版本,请参见,javascript,c++,v8,Javascript,C++,V8" />

从C+;引发JavaScript异常+;使用googlev8编写代码 我正在编写一个JavaScript应用程序,它访问谷歌V8. 上的一些C++代码。 一切都很好,但是我无法理解如何抛出JavaScript异常,它可以从C++方法中捕获到JavaScript代码。 例如,如果我在C++中有一个函数,比如 ... using namespace std; using namespace v8; ... static Handle<Value> jsHello(const Arguments& args) { String::Utf8Value input(args[0]); if (input == "Hello") { string result = "world"; return String::New(result.c_str()); } else { // throw exception } } ... global->Set(String::New("hello"), FunctionTemplate::New(jsHello)); Persistent<Context> context = Context::New(NULL, global); ... P>从C++代码中抛出V8异常的正确方法是什么?< Stime> Ed: >此答案是针对V8的较旧版本。有关当前版本,请参见

从C+;引发JavaScript异常+;使用googlev8编写代码 我正在编写一个JavaScript应用程序,它访问谷歌V8. 上的一些C++代码。 一切都很好,但是我无法理解如何抛出JavaScript异常,它可以从C++方法中捕获到JavaScript代码。 例如,如果我在C++中有一个函数,比如 ... using namespace std; using namespace v8; ... static Handle<Value> jsHello(const Arguments& args) { String::Utf8Value input(args[0]); if (input == "Hello") { string result = "world"; return String::New(result.c_str()); } else { // throw exception } } ... global->Set(String::New("hello"), FunctionTemplate::New(jsHello)); Persistent<Context> context = Context::New(NULL, global); ... P>从C++代码中抛出V8异常的正确方法是什么?< Stime> Ed: >此答案是针对V8的较旧版本。有关当前版本,请参见,javascript,c++,v8,Javascript,C++,V8,您还可以使用v8::exception中的静态函数抛出更具体的异常: return v8::ThrowException(v8::Exception::RangeError(v8::String::New("..."))); return v8::ThrowException(v8::Exception::ReferenceError(v8::String::New("..."))); return v8::ThrowException(v8::Exception::SyntaxError(v8

您还可以使用
v8::exception
中的静态函数抛出更具体的异常:

return v8::ThrowException(v8::Exception::RangeError(v8::String::New("...")));
return v8::ThrowException(v8::Exception::ReferenceError(v8::String::New("...")));
return v8::ThrowException(v8::Exception::SyntaxError(v8::String::New("...")));
return v8::ThrowException(v8::Exception::TypeError(v8::String::New("...")));
return v8::ThrowException(v8::Exception::Error(v8::String::New("...")));

在v8的最后版本中,Mattew的答案不起作用。现在,在您使用的每个函数中,都会得到一个孤立对象

使用隔离对象引发的新异常如下所示:

Isolate* isolate = Isolate::GetCurrent();
isolate->ThrowException(String::NewFromUtf8(isolate, "error string here"));

非常感谢。在过去的3个星期里,我一直在阅读V8API,不知怎么设法错过了这个。我在我的C++函数返回到JS>代码>隔离> >抛出异常之后(V8::Ext::RangeError(String::NeNFROMMOTF8(隔离,错误字符串))),在我的C++代码中出现了分段错误<代码>。代码>(哇,我就用Nan。)
return v8::ThrowException(v8::Exception::RangeError(v8::String::New("...")));
return v8::ThrowException(v8::Exception::ReferenceError(v8::String::New("...")));
return v8::ThrowException(v8::Exception::SyntaxError(v8::String::New("...")));
return v8::ThrowException(v8::Exception::TypeError(v8::String::New("...")));
return v8::ThrowException(v8::Exception::Error(v8::String::New("...")));
Isolate* isolate = Isolate::GetCurrent();
isolate->ThrowException(String::NewFromUtf8(isolate, "error string here"));