Unten ist ein Stück Code:Zugriff auf globale Variablen in setImmediate in node.js
var buffer = new Buffer(0, 'hex'); //Global buffer
socket.on('data', function(data) {
// Concatenate the received data to buffer
buffer = Buffer.concat([buffer, new Buffer(data, 'hex')]);
setImmediate(function() { // Executed asynchronously
/*Process messages received in buffer*/
var messageLength = getMessageLength(buffer);
while (buffer.length >= messageLength) {
/*Process message and send response*/
}
//Remove message from buffer after processing is done
buffer.splice(messageLength);
}) // End of setImmediate
}) //End of socket.on
ich eine globale Variable 'Puffer' verwende, innerhalb des setImmediate Block (ausgeführt asynchron). Gibt es eine Garantie, dass sich die globale Puffervariable während der Ausführung des Codes im setImmediate-Block nicht ändert (entweder durch Hinzufügen von Daten oder Löschen von Daten)? Wenn nein, wie geht man damit um, dass auf den Puffer sicher zugegriffen wird ??
Was ist dein Problem? Sie möchten, dass der Puffer sicher ist (Puffer wird nicht vom äußeren Programm benutzt), wenn setImmediate aufgerufen wird? Wenn setImmediate func body sync ist, müssen Sie sich keine Gedanken darüber machen, javascript ist single thread. Wenn setImmediate func body async ist, verwenden Sie die closure-Variable statt der globalen. –