Javascript 如何推荐node.js加载项方法

Javascript 如何推荐node.js加载项方法,javascript,node.js,v8,Javascript,Node.js,V8,我想准备一个对NPM包的请求,以支持Promises/a+。这个包利用JNI,使在node.js应用程序中使用Javascript中的Java类成为可能。对于每个导入的java类,它在同步和异步变体中公开该类的方法。async变体使用标准的node.js回调函数,这些函数很容易从javascript中实现,我已经使用Q和Bluebird实现了这一点。但我想增强NodeJava,使其能够自动提供推荐的方法。对于已经有过v8和node.js插件经验的人来说,这可能是一项微不足道的任务,但我对这两种插

我想准备一个对NPM包的请求,以支持Promises/a+。这个包利用JNI,使在node.js应用程序中使用Javascript中的Java类成为可能。对于每个导入的java类,它在同步和异步变体中公开该类的方法。async变体使用标准的node.js回调函数,这些函数很容易从javascript中实现,我已经使用Q和Bluebird实现了这一点。但我想增强NodeJava,使其能够自动提供推荐的方法。对于已经有过v8和node.js插件经验的人来说,这可能是一项微不足道的任务,但我对这两种插件都是新手。我希望这里的人能帮我省下至少几天的学习时间

我需要修改的关键代码在中,看起来像这样,我在github上添加了一些源代码中没有的注释:

for(std::list<jobject>::iterator it = methods.begin(); it != methods.end(); ++it) {
  jstring methodNameJava = (jstring)env->CallObjectMethod(*it, method_getName);
  assert(!env->ExceptionCheck());
  std::string methodNameStr = javaToString(env, methodNameJava);

  // Create the async method variant, named exactly as the java method is named
  v8::Handle<v8::String> methodName = NanNew<v8::String>(methodNameStr.c_str());
  v8::Local<v8::FunctionTemplate> methodCallTemplate = NanNew<v8::FunctionTemplate>(methodCall, methodName);
  funcTemplate->PrototypeTemplate()->Set(methodName, methodCallTemplate->GetFunction());

  // Create the sync method variant, with 'Sync' appended to the method name
  v8::Handle<v8::String> methodNameSync = NanNew<v8::String>((methodNameStr + "Sync").c_str());
  v8::Local<v8::FunctionTemplate> methodCallSyncTemplate = NanNew<v8::FunctionTemplate>(methodCallSync, methodName);
  funcTemplate->PrototypeTemplate()->Set(methodNameSync, methodCallSyncTemplate->GetFunction());
}
我需要知道如何实现新方法setAsyncOptionsasyncOptions

然后,在上面的循环中,我将添加以下代码:

var java = require('java');
var asyncOptions = {
  promisify: require('q').nfbind     // or require('bluebird').promisify
  suffix: 'Promise'
};
java.setAsyncOptions(asyncOptions);
// Create the promise method variant, appending to the original method name the passed in suffix.
v8::Handle<v8::String> promiseSuffixStr = ???; // asyncOptions.suffix
v8::Handle<v8::String> methodNamePromise = NanNew<v8::String>(methodNameStr + promiseSuffixStr);
v8::Local<v8::FunctionTemplate> methodCallTemplate = NanNew<v8::FunctionTemplate>(methodCall, methodName);
v8::Local<v8::FunctionTemplate> promiseCallTemplate = ???; // asyncOptions.promisify(methodCallTemplate)
funcTemplate->PrototypeTemplate()->Set(methodNamePromise, promiseCallTemplate->GetFunction());
我需要两个部分的帮助,如

提前感谢您的帮助


编辑:我已经在这方面取得了很好的进展,并且已经提交了一份PR草案。NodeJava的所有者已经同意与我合作完成它。欢迎阅读本文的任何人查看。当我们有一个完整的解决方案时,我将用一个答案更新这个问题。

我能够找到完整的解决方案,它现在被合并到node java npm包中。看