|
27 | 27 | std::replace(className.begin(), className.end(), '[', 'a'); |
28 | 28 | className = "nodeJava_" + className; |
29 | 29 |
|
| 30 | + // Set up promisification |
| 31 | + v8::Local<v8::Object> asyncOptions = NanObjectWrapHandle(java)->Get(NanNew<v8::String>("asyncOptions"))->ToObject(); |
| 32 | + v8::Local<v8::Function> promisify; |
| 33 | + std::string promiseSuffix; |
| 34 | + bool promisifying = asyncOptions->IsObject(); |
| 35 | + if(promisifying) { |
| 36 | + v8::Local<v8::Value> promisifyValue = asyncOptions->Get(NanNew<v8::String>("promisify")); |
| 37 | + promisify = v8::Function::Cast(*promisifyValue); |
| 38 | + v8::Local<v8::String> suffix = asyncOptions->Get(NanNew<v8::String>("suffix"))->ToString(); |
| 39 | + v8::String::Utf8Value utf8(suffix); |
| 40 | + promiseSuffix.assign(*utf8); |
| 41 | + } |
| 42 | + |
30 | 43 | v8::Local<v8::FunctionTemplate> funcTemplate; |
31 | 44 | if(sFunctionTemplates.find(className) != sFunctionTemplates.end()) { |
32 | 45 | //printf("existing className: %s\n", className.c_str()); |
|
54 | 67 | v8::Handle<v8::String> methodNameSync = NanNew<v8::String>((methodNameStr + "Sync").c_str()); |
55 | 68 | v8::Local<v8::FunctionTemplate> methodCallSyncTemplate = NanNew<v8::FunctionTemplate>(methodCallSync, methodName); |
56 | 69 | funcTemplate->PrototypeTemplate()->Set(methodNameSync, methodCallSyncTemplate->GetFunction()); |
| 70 | + |
| 71 | + if (promisifying) { |
| 72 | + v8::Local<v8::Object> recv = asyncOptions; // just a dummy receiver |
| 73 | + v8::Local<v8::Value> argv[] = { methodCallTemplate->GetFunction() }; |
| 74 | + v8::Local<v8::Value> result = promisify->Call(recv, 1, argv); |
| 75 | + if (!result->IsFunction()) { |
| 76 | + printf("Promisified result is not a function.\n"); |
| 77 | + } |
| 78 | + v8::Local<v8::Function> promFunction = v8::Function::Cast(*result); |
| 79 | + v8::Handle<v8::String> methodNamePromise = NanNew<v8::String>((methodNameStr + promiseSuffix).c_str());\ |
| 80 | + funcTemplate->PrototypeTemplate()->Set(methodNamePromise, promFunction); |
| 81 | + } |
57 | 82 | } |
58 | 83 |
|
59 | 84 | std::list<jobject> fields; |
|
0 commit comments