Skip to content

Is it addon must put one parameter at least? #159

Description

@webbery

Hi,

I got this error when I passed none paramter in my addon function:

#
# Fatal error in , line 0
# Check failed: receiver.IsJSFunction().
#
#
#
#FailureMessage Object: 0000008C4ABCEC60
 1: 00007FF66745D1EF napi_wrap+113103
 2: 00007FF66739334F v8::internal::wasm::JSToWasmWrapperCompilationUnit::~JSToWasmWrapperCompilationUnit+258639
 3: 00007FF667DD8E64 V8_Fatal+212
 4: 00007FF6679725D8 v8::internal::JSReceiver::GetCreationContext+360
 5: 00007FF667BFED00 v8::Object::CreationContext+32
 6: 00007FF66747D6C8 node::MakeCallback+40
 7: 00007FF9B44651BF Nan::AsyncResource::runInAsyncScope+175 [E:\code\nodejs\civet\caxios\node_modules\nan\nan.h]:L612
 8: 00007FF9B4465719 Nan::Callback::Call_+153 [E:\code\nodejs\civet\caxios\node_modules\nan\nan.h]:L1806
...

But if I put one parameter it was work.

await getFilesSnap()  // not work
await getFilesSnap(0) // word

My C++ code like this:

exports->Set(context, 
    String::NewFromUtf8(isolate, getFilesSnap, v8::NewStringType::kNormal) 
    .ToLocalChecked(), 
    v8::FunctionTemplate::New(isolate, getFilesSnap, external) 
    ->GetFunction(context).ToLocalChecked()).FromJust();

I google none of infomation about how to pass none parameter in my function. If you have any link, please tell me.
Thank you.

Activity

  1. helio-frota commented on Oct 3, 2020

    @helio-frota
    Contributor
  2. webbery commented on Oct 6, 2020

    @webbery
    Author

    @helio-frota Thanks. That's not I need. I need function like this:

    // js
    getAllData();
    
    // C++
    void getAllData(const v8::FunctionCallbackInfo<v8::Value>&){
     std::cout<<"getAllData"<<std::endl;
    }
    

    But in order to work, I must call it like this:

    // js
    getAllData(0); // must put 0 or other value to avoid runtime error
    
  3. helio-frota commented on Oct 6, 2020

    @helio-frota
    Contributor

    That's is weird, I'm still learning n-api btw. I have a working example here: https://github.com/helio-frota/sandwich/
    That is nothing but TS calling JS that calls C++ (n-api) that calls C and not using any extra function parameter in order to work.
    JS calling the N-api part here: https://github.com/helio-frota/sandwich/blob/master/jsPart.js#L5

    I hope this help in some way

  4. NickNaso commented on Oct 6, 2020

    @NickNaso
    Member

    @webbery is your code public?

  5. helio-frota commented on Oct 7, 2020

    @helio-frota
    Contributor

    @webbery you can also trust on the example I shared because it was double checked and fixed by @NickNaso 😎

  6. webbery commented on Oct 8, 2020

    @webbery
    Author

    Here is my code:
    https://github.com/webbery/civet/tree/master/caxios
    The problem function is getFilesSnap in interface.cpp. I want to call it with getFilesSnap() but getFilesSnap( **anything_except_void** ) can work.
    Why?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions