Async ждут в родном модуле - PullRequest
0 голосов
/ 07 июля 2019

Я учусь использовать node-addon-api , и теперь я застрял на асинхронном / ожидающем управлении.Я не могу понять, как обрабатывать случай, когда нативная функция получает объект, который имеет асинхронную функцию.

Javascript:

const addon = require('bindings')('addon');

class Foo {
    async doAsync() {
        ...
    }
}

const useFoo = () => {
    const foo = new Foo();
    await addon.doStuff(foo);
}

Native:

#include <napi.h>
using namespace Napi;

Napi::Object doStuff(const Napi::CallbackInfo& info) {
     Napi::Env env = info.Env();
     MyObject* foo = Napi::ObjectWrap<MyObject>::Unwrap(info[0].As<Napi::Object>());
     // How should I await for this?
     foo.doAsync();
     ...
}

Napi::Object InitAll(Napi::Env env, Napi::Object exports) {
    exports.Set(Napi::String::New(env, "doStuff"), Napi::Function::New(env, doStuff));
    return exports;
}

NODE_API_MODULE(addon, InitAll)

Моя проблема заключается в том, что я не могу найти никаких документов об этом поведении.Я читал о том, как создать обещание на нативном языке, но не о том, как его использовать при получении от JS.

...