diff options
author | Alexander Borisov <alexander.borisov@nginx.com> | 2018-12-19 15:56:13 +0300 |
---|---|---|
committer | Alexander Borisov <alexander.borisov@nginx.com> | 2018-12-19 15:56:13 +0300 |
commit | 607653c0f12a99981dbf3118b60b84ded4084d50 (patch) | |
tree | a45c3e5832b034917ccbe9c2c7026dc9ca21537a | |
parent | 704fe556b423795d06f79cec3a3406ef6defb635 (diff) | |
download | unit-607653c0f12a99981dbf3118b60b84ded4084d50.tar.gz unit-607653c0f12a99981dbf3118b60b84ded4084d50.tar.bz2 |
Node.js: calling write callback asynchronously.
Diffstat (limited to '')
-rwxr-xr-x | src/nodejs/unit-http/http_server.js | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/nodejs/unit-http/http_server.js b/src/nodejs/unit-http/http_server.js index c93d2b10..28f2303f 100755 --- a/src/nodejs/unit-http/http_server.js +++ b/src/nodejs/unit-http/http_server.js @@ -217,7 +217,19 @@ ServerResponse.prototype._writeBody = function(chunk, encoding, callback) { } if (typeof callback === 'function') { - callback(this); + /* + * The callback must be called only when response.write() caller + * completes. process.nextTick() postpones the callback execution. + * + * process.nextTick() is not technically part of the event loop. + * Instead, the nextTickQueue will be processed after the current + * operation completes, regardless of the current phase of + * the event loop. All callbacks passed to process.nextTick() + * will be resolved before the event loop continues. + */ + process.nextTick(function () { + callback(this); + }.bind(this)); } }; |