Ich schreibe ein asynchrones Node-Addon, aber ich habe Mühe, herauszufinden, ob ich ein HandleScope in der "After" -Funktion verwenden muss, die den Client-JavaScript-Callback aufruft. Ich habe Beispiele mit und ohne neue Bereiche gesehen, aber nie eine Erklärung warum. Hier ein Beispiel:Korrekte Verwendung von HandleScope im asynchronen Addon
void asyncWorkAfter(uv_work_t* req) {
HandleScope scope; // <-- Do you need a new scope?
const int argc = 1;
Local<Value> foo = String::New("foo");
Local<Value> argv[] = { foo };
// assume I got my callback function out of req
callback->Call(Context::GetCurrent()->Global(), argc, argv);
callback.Dispose();
// if i use a new HandleScope, what happens to argv when we go out of scope?
// Do i need to do something like a scope.Close() to copy argv to the parent scope?
}
Benötigen/benötigen Sie ein HandleScope, wenn Sie den Callback anrufen?
Was passiert mit argv im Beispiel, wenn Sie ein neues HandleScope verwenden?
Mein understaning ist, dass Sie HandleScope jedes Mal, wenn Sie vor Ort benötigen, die ordnungsgemäß gesammelt Einheimischen werden können. –