@
xuexixuexi 你用回调函数不就是异步的么
大约是如下的吧,参考了
http://www.cnblogs.com/yupeng/p/3469444.htmlhtmlpage.js
function requestNodejs() {
require('nodejs-c-extension').execute(params, function onTrunkGotCallback(percent) {
//update the progress
updateHtmlProgress(percent);
}, function onFinishCallback(responseData){
//task finished
updateHtmlByData(responseData);
});
}
nodejs-c-extension.cc#include <node.h>
using namespace v8;
Handle<Value> HandleCall(const Arguments& args) {
HandleScope scope;
/*
* 3 arguments: params, trunkCallback, finishCallback
*/
Local<Value> params = Local<Value>::Cast(args[0]);
Local<Function> trunkCallback = Local<Function>::Cast(args[1]);
Local<Function> finishCallback = Local<Function>::Cast(args[2]);
const unsigned argc = 1;
Local<Value> argv[argc];
//Do some stuff and report the progress
for (int i = 0; i < 100; i++) {
argv[argc] = { Local<Value>::New(String::New(i) };
trunkCallback->Call(Context::GetCurrent()->Global(), argc, argv);
}
//finished, replace argv with data got
finishCallback->Call(Context::GetCurrent()->Global(), argc, argv);
return scope.Close(Undefined());
}
/*
* Define function exports.execute as HandleCall
*/
void Init(Handle<Object> exports, Handle<Object> module) {
exports->Set(String::NewSymbol("execute"),
FunctionTemplate::New(HandleCall)->GetFunction());
}
NODE_MODULE(nodejs-c-extension, Init)