遇到事件的困难

时间:2019-04-02 19:02:31

标签: javascript node.js events

我无法理解这些事件。每当我看到带有事件的代码示例时,我都找不到它们的文档,只是能够理解测试。例如,在这段代码中,我通过测试了解了“ 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();
});

1 个答案:

答案 0 :(得分:0)

这是流的文档:https://millermedeiros.github.io/mdoc/examples/node_api/doc/streams.html

您会看到stdin是流:https://nodejs.org/api/process.html#process_process_stdin

因此,无论适用于Stream还是适用于stdin。

数据事件:

  

'data'事件发出一个Buffer(默认情况)或一个字符串,如果   使用了setEncoding()。

因此,数据事件正在将流中的大量数据加载到Buffer或字符串中。

结束事件:

  

在流接收到EOF(TCP术语中的FIN)时发出。   表示将不再发生“数据”事件。如果流是   也是可写的,有可能继续写作。

因此,毫无疑问,当最后一个数据事件发生时,将触发结束事件。

为说明这一点,我们假设您有一个2 GB大小的文件流。在这种情况下,数据块是从该文件加载的,假设块的大小为S。在这种情况下,将有大约2 GB / S的加载步骤。这意味着将有许多数据事件,并且在下一个数据包要加载时,系统将始终触发数据事件。最后,当没有其他要加载的内容时,它将触发结束事件。现在我们了解Streams,我想您现在也了解stdin也发生了同样的事情。没有什么可以阻止stdin突然接收大量数据的可能性。