我正在为 Node.js 编写 Agueas [1] 插件
现在我有同步代码,C++ 类看起来像这样:
class LibAugeas : public node::ObjectWrap {
public:
static void Init(Handle<Object> target);
protected:
augeas * m_aug;
LibAugeas();
~LibAugeas();
static Handle<Value> New(const Arguments& args);
static Handle<Value> get (const Arguments& args);
static Handle<Value> set (const Arguments& args);
static Handle<Value> setm (const Arguments& args);
// other methods
};
这个类在 JS 中的用法:
var lib = require('...');
var aug = new lib.Augeas(...);
aug.set(...);
aug.get(...);
// etc
我要实现异步代码。
瓶颈是在加载和解析所有或部分镜头和文件时创建 augeas 对象 (aug_init)。所以想法是异步创建augeas对象,然后在回调函数中传递创建的JS对象:
- 纯C线程:调用aug_init()、aug_load()获取augeas句柄。
- 准备好后,使用 augeas 句柄创建 JS 对象(参见第一个片段)
- 将创建的 JS 对象传递给回调函数。
用法可能是这样的:
lib.heracles(function(aug) {
if (!aug.error()) {
console.log('Hello!');
// async save:
aug.save(function(err, msg) {
console.log(msg);
});
} else {
console.log('Sad, but true :-(');
}
}
);
最后,我的问题:我不知道如何在 C++ 中创建 JS 对象 :-)
构造函数static Handle<Value> New(const Arguments& args);
返回args.This()
,但是当我在 C++ 代码中时,我没有args
也不能包装对象。
那么,如何在 C++ 中创建 JS 对象呢?请不要让我伤心地说这是不可能的:-)