doc: hide undocumented object artifacts in async_hooks

The examples show `process.stdout.fd` as a means to use synchronous
writes in async_hooks context. However this is an undocumented field,
so showcase a file write example instead.

Fixes: https://github.com/nodejs/node/issues/22873

PR-URL: https://github.com/nodejs/node/pull/24741
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Vse Mozhet Byt <vsemozhetbyt@gmail.com>
This commit is contained in:
Gireesh Punathil 2018-11-30 14:36:14 +05:30 committed by Rich Trott
parent edcb950090
commit 9159fb733c

View File

@ -150,9 +150,9 @@ Because printing to the console is an asynchronous operation, `console.log()`
will cause the AsyncHooks callbacks to be called. Using `console.log()` or will cause the AsyncHooks callbacks to be called. Using `console.log()` or
similar asynchronous operations inside an AsyncHooks callback function will thus similar asynchronous operations inside an AsyncHooks callback function will thus
cause an infinite recursion. An easy solution to this when debugging is to use a cause an infinite recursion. An easy solution to this when debugging is to use a
synchronous logging operation such as `fs.writeSync(process.stdout.fd, msg)`. synchronous logging operation such as `fs.writeFileSync(file, msg, flag)`.
This will print to stdout and will not invoke AsyncHooks recursively because it This will print to the file and will not invoke AsyncHooks recursively because
is synchronous. it is synchronous.
```js ```js
const fs = require('fs'); const fs = require('fs');
@ -160,7 +160,7 @@ const util = require('util');
function debug(...args) { function debug(...args) {
// use a function like this one when debugging inside an AsyncHooks callback // use a function like this one when debugging inside an AsyncHooks callback
fs.writeSync(process.stdout.fd, `${util.format(...args)}\n`); fs.writeFileSync('log.out', `${util.format(...args)}\n`, { flag: 'a' });
} }
``` ```
@ -329,17 +329,20 @@ async_hooks.createHook({
}, },
before(asyncId) { before(asyncId) {
const indentStr = ' '.repeat(indent); const indentStr = ' '.repeat(indent);
fs.writeSync(process.stdout.fd, `${indentStr}before: ${asyncId}\n`); fs.writeFileSync('log.out',
`${indentStr}before: ${asyncId}\n`, { flag: 'a' });
indent += 2; indent += 2;
}, },
after(asyncId) { after(asyncId) {
indent -= 2; indent -= 2;
const indentStr = ' '.repeat(indent); const indentStr = ' '.repeat(indent);
fs.writeSync(process.stdout.fd, `${indentStr}after: ${asyncId}\n`); fs.writeFileSync('log.out',
`${indentStr}after: ${asyncId}\n`, { flag: 'a' });
}, },
destroy(asyncId) { destroy(asyncId) {
const indentStr = ' '.repeat(indent); const indentStr = ' '.repeat(indent);
fs.writeSync(process.stdout.fd, `${indentStr}destroy: ${asyncId}\n`); fs.writeFileSync('log.out',
`${indentStr}destroy: ${asyncId}\n`, { flag: 'a' });
}, },
}).enable(); }).enable();