Node.js插件编写-异步AsyncWorker的代码实现
Posted UsherYue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js插件编写-异步AsyncWorker的代码实现相关的知识,希望对你有一定的参考价值。
异步介绍
我们在Node.js中经常用到异步机制, 比如异步改变一个文件的访问权限,然后任务完成之后我们收到一个回调通知:
代码如下:
import chmod from 'fs';
chmod('chmod.txt', 0o775, (err) =>
console.log('The permissions for file "my_file.txt" have been changed!');
);
原理实现
这里我们用到了一个很重要的类,Napi::AsyncWorker , 继承自这个类就拥有了异步线程的能力。
实现下面这两个函数方法,就可以实现异步任务,并且在任务中访问 JS引擎是线程安全的。
void Execute()
void OnOK()
插件代码
AsyncWork.cpp
//
// Created by usher.yue on 2021/12/31.
//
#ifndef MY_NODE_ADDON_ASYNCWORK_H
#define MY_NODE_ADDON_ASYNCWORK_H
#include <napi.h>
class AsyncWork : public Napi::AsyncWorker
using INTVAL=int;
public:
AsyncWork(Napi::Function& callback, int value): Napi::AsyncWorker(callback),val_(value)
~AsyncWork()
// worker执行代码
void Execute()
printf("the worker-thread doing! %d \\n",val_);
//worker完成后回调
void OnOK()
Callback().Call(Env().Undefined(), Napi::Number::New(Env(), 0));
private:
INTVAL val_;
;
#endif //MY_NODE_ADDON_ASYNCWORK_H
main.cpp
#include <napi.h>
#include "AsyncWork.h"
// 暴露一个函数js调用
Napi::Value asyncDo(const Napi::CallbackInfo& info)
int value = info[0].As<Napi::Number>().Uint32Value();
//反解析
Napi::Function callback = info[1].As<Napi::Function>();
AsyncWork* piWorker = new AsyncWork(callback, value);
piWorker->Queue();
return info.Env().Null();
//模块注册函数,用于每个自定义模块注册
Napi::Object Init(Napi::Env env, Napi::Object exports)
//暴露方法
exports.Set(Napi::String::New(env,"asyncDo"),Napi::Function::New(env,asyncDo));
return exports;
NODE_API_MODULE(addon, Init)
index.js调用
var addon = require('bindings')('my_node_addon.node');
addon.asyncDo(100,async(err,ret)=>
console.log("done!")
console.log('Callback err:',err);
console.log('Callback ret:',ret);
);
输出结果
到这里简单的代码我们就完成了,Node.js异步任务插件的开发。
以上是关于Node.js插件编写-异步AsyncWorker的代码实现的主要内容,如果未能解决你的问题,请参考以下文章
Node.js插件编写-异步AsyncWorker的代码实现
Node.js插件编写-插件代码通过Emit与js代码进行交互
Node.js插件编写-插件代码通过Emit与js代码进行交互