javascript - 事件难度
问题描述
我很难理解这些事件。每当我看到带有事件的代码示例时,我都找不到它们的文档,只能理解测试。例如,在这段代码中,我通过测试理解了“SIGINT”,但我没有找到文档。“结束”我找不到文档,我也无法理解“结束”何时会被解雇。这些事件会发生什么?为什么查找文档这么麻烦?事件是上下文相关的吗?如何知道上下文以及在哪里搜索?谢谢你,很抱歉这个愚蠢的问题。
const fs = require('fs');
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', inputStdin => { inputString
inputString += inputStdin;
});
process.stdin.on('end', function() {
inputString = inputString.replace(/\s*$/, '')
.split('\n')
.map(str => str.replace(/\s*$/, ''));
main();
});
解决方案
这是流的文档:https ://millermedeiros.github.io/mdoc/examples/node_api/doc/streams.html
可以看到stdin是一个Stream:https ://nodejs.org/api/process.html#process_process_stdin
因此,无论适用于 Stream,也适用于标准输入。
数据事件:
如果使用了 setEncoding(),则 'data' 事件会发出 Buffer(默认情况下)或字符串。
因此,数据事件正在将数据块从 Stream 加载到 Buffer 或字符串中。
结束事件:
当流接收到 EOF(TCP 术语中的 FIN)时发出。表示不会再发生“数据”事件。如果流也是可写的,则可以继续写。
因此,当最后一个数据事件发生时,就会触发结束事件。
为了解释这一点,假设您有一个大小为 2 GB 的文件流。在这种情况下,从该文件加载数据块,假设块的大小为 S。在这种情况下,您将有大约 2 GB / S 的加载步骤。这意味着会有很多数据事件,并且系统总是会在有下一个要加载的数据包时触发数据事件。最后,当没有更多要加载的内容时,它会触发结束事件。既然我们了解了 Streams,我想你现在明白了 stdin 也会发生同样的事情。没有什么能阻止标准输入突然收到大量数据的可能性。
推荐阅读
- express - 为什么我的电子事件被延迟到渲染过程?
- javascript - 如何使用 Ronomon Reed-Solomon 库将文件分割成块
- css - 为帖子内容中没有链接的所有图像添加边距
- jquery - 将放置对象的数据属性放入可排序的 div
- square - SquarePointOfSaleSDK 交易 id 为 nil
- node.js - React-Native 发送文件等,如 whatsapp
- java - 我应该从 onCreate 或 onResume 中的 sharedpreferences 中加载值吗?
- angular - 在我已经“进入”我的 Kendo Grid 之后,如何从我的 Angular 2 组件中访问某些内容
- postgresql - 在相似记录中选择最新的更新记录
- git - git --ff-only --squash 将分支变基为 master