Решилось, правда не совсем так как хотелось. Теперь вызов коллбека асинхронен, но мне нужно получить результат внутри «process», хотябы просто дождаться завершения «after».
uv_work_t *baton;
void work(uv_work_t* task) {}
void after(uv_work_t* task, int status) {
HandleScope scope;
int n = *((int*)(&task->data));
const unsigned argc = 1;
Local<Value> argv[argc] = { Local<Value>::New( Number::New(n) ) };
processCallback->Call(Context::GetCurrent()->Global(), argc, argv);
scope.Close(Undefined());
delete task;
}
int process()
{
baton = new uv_work_t();
baton->data = (void*)123;
uv_queue_work(uv_default_loop(), baton, work, after);
return 0;
}