4

我想创建一个错误对象。但是没有v8::Error::New()如何创建错误对象?

    v8::Handle< v8::Value > result = v8::Undefined();
    v8::Handle< v8::Value > error = v8::Undefined();

    if(m_errorMsg.empty())
    {
        // Not error
    }
    else
    {
        // HERE: Instead of a string I want an error object.
        error = v8::String::New( m_errorMsg.c_str() );
    }

    v8::Handle< v8::Value > argv[] = { error, result };

    m_callback->Call(v8::Context::GetCurrent()->Global(), 2, argv);
4

3 回答 3

5

实际上api被改变了。现在,您可以通过这种方式抛出异常

...
Isolate* isolate = args.GetIsolate();
isolate->ThrowException(Exception::TypeError(
    String::NewFromUtf8(isolate, "Your error message")));
...
于 2016-11-28T09:20:39.927 回答
2

据我所知,没有一个v8::Error类,但有一个类v8::Exception提供静态成员函数,通过提供v8::String参数来构造不同类型的错误。

看看v8::Exception Class Reference,这可能就是你要找的。

我希望这有帮助。

于 2013-09-03T14:45:29.317 回答
2

这不是特定于 Node 的,您可以使用ThrowExceptionV8 API 中的方法。它需要一个类型的参数Exception,您可以使用Exception类的静态方法之一创建该参数。

在这个 Node 教程中有关于如何做到这一点的示例,但也可以随时在 GitHub 上查看我的代码

ThrowException(Exception::TypeError(String::New("This is an error, oh yes.")));
return Undefined();

注意:不要忘记Undefined()在调用后返回ThrowException。(在这种情况下,甚至scope.close是不必要的。)

进一步阅读:

于 2013-11-05T23:58:05.303 回答