## Asynchronous work helpers
`Nan::AsyncWorker` and `Nan::AsyncProgressWorker` are helper classes that make working with asynchronous code easier.
– Nan::AsyncWorker
– Nan::AsyncProgressWorker
– Nan::AsyncQueueWorker
`Nan::AsyncWorker` is an _abstract_ class that you can subclass to have much of the annoying asynchronous queuing and handling taken care of for you. It can even store arbitrary V8 objects for you and have them persist while the asynchronous work is in progress.
Definition:
“`c++
class AsyncWorker {
public:
explicit AsyncWorker(Callback *callback_);
virtual ~AsyncWorker();
virtual void WorkComplete();
void SaveToPersistent(const char *key, const v8::Local
void SaveToPersistent(const v8::Local
const v8::Local
void SaveToPersistent(uint32_t index,
const v8::Local
v8::Local
v8::Local
v8::Local
virtual void Execute() = 0;
uv_work_t request;
virtual void Destroy();
protected:
Persistent
Callback *callback;
virtual void HandleOKCallback();
virtual void HandleErrorCallback();
void SetErrorMessage(const char *msg);
const char* ErrorMessage();
};
“`
### Nan::AsyncProgressWorkerBase & Nan::AsyncProgressWorker
`Nan::AsyncProgressWorkerBase` is an _abstract_ class template that extends `Nan::AsyncWorker` and adds additional progress reporting callbacks that can be used during the asynchronous work execution to provide progress data back to JavaScript.
Previously the definiton of `Nan::AsyncProgressWorker` only allowed sending `const char` data. Now extending `Nan::AsyncProgressWorker` will yield an instance of the implicit `Nan::AsyncProgressWorkerBase` template with type `
Definition:
“`c++
template
class AsyncProgressWorkerBase
public:
explicit AsyncProgressWorker(Callback *callback_);
virtual ~AsyncProgressWorker();
void WorkProgress();
class ExecutionProgress {
public:
void Signal() const;
void Send(const T* data, size_t size) const;
};
virtual void Execute(const ExecutionProgress& progress) = 0;
virtual void HandleProgressCallback(const T *data, size_t size) = 0;
virtual void Destroy();
typedef AsyncProgressWorkerBase
“`
`Nan::AsyncQueueWorker` will run a `Nan::AsyncWorker` asynchronously via libuv. Both the `execute` and `after_work` steps are taken care of for you. Most of the logic for this is embedded in `Nan::AsyncWorker`.
Definition:
“`c++
void AsyncQueueWorker(AsyncWorker *);
“`