const subprocess = require("child_process").spawn("bad_command");
subprocess.on("error", _ => {
console.info("Failed to spawn a subprocess.");
});
> node test.js
Failed to spawn a subprocess.
构造一个,,然后听它。
虽然这被认为是听听 Linables 的正确方法(socket.io
插座也可以。(它不会毫无问题地工作,但我脑海中有点怀疑:" 出于什么原因永远不会错过任何事件?"
我的理解是,事件可能会异步在发射器的创建中发生在上。因此,我想像"为什么不在聆听之前(.on
(向他们进行?什么到底确保在调用.on
方法之前不会发生任何事件?"
还有两个实验
const subprocess = require("child_process").spawn("bad_command");
setTimeout(_ => subprocess.on("error", _ => {
console.info("Failed to spawn a subprocess.");
}), 10);
> node test.js
events.js:180
throw er; // Unhandled 'error' event
^
Error: spawn bad_command ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:264:19)
at onErrorNT (internal/child_process.js:456:16)
at processTicksAndRejections (internal/process/task_queues.js:77:11)
Emitted 'error' event at:
at Process.ChildProcess._handle.onexit (internal/child_process.js:270:12)
at onErrorNT (internal/child_process.js:456:16)
at processTicksAndRejections (internal/process/task_queues.js:77:11) {
errno: 'ENOENT',
code: 'ENOENT',
syscall: 'spawn bad_command',
path: 'bad_command',
spawnargs: []
}
const subprocess = require("child_process").spawn("bad_command");
(function heavy_synchronous_task_that_takes_much_longer() {
const Crypto = require("crypto");
const buffer = Buffer.alloc(1_000_000);
console.log(Date.now());
for(let i = 0; i < 10_000; ++i) {
Crypto.randomFillSync(buffer);
}
console.log(Date.now());
})();
subprocess.on("error", _ => {
console.info("Failed to spawn a subprocess.");
});
> node test.js
1562646732809
1562646744631
Failed to spawn a subprocess.
我在那里发现是可以确保它的东西,只有当听众跟踪是同步的时(我猜时机没关系。(,但是我无法掌握引擎盖下的情况,因为代码代码本身不会告诉我有关原因的任何信息。
我相信可以给我一个良好的语言特定 - 方向或发动机 - 实践 - 解释。
错误事件是在过程退出时发出的,该事件由" nexttick"函数处理(请参见此处的1140行(。
NextTick,如果我要正确读取事件循环文档,则允许我们"使用process.nexttick((我们保证[...]在其余的用户代码之后和之前始终运行其回调允许事件循环继续。"