被Node.js readline on()方法混淆

用户名

我对从readline on()方法中看到的一些简单行为感到困惑

我有一个名为的文件small.csv,看起来像这样:

Date,Close
2015-11-12,2045.97
2015-11-11,2075.00
2015-11-10,2081.72
2015-11-09,2078.58

我写了这个脚本:

my.js

var rl = require('readline').createInterface({
  input: require('fs').createReadStream('small.csv')
});

global.myarray = [];
rl.on('line', function (line) {
  console.log('Line from file:', line);
  global.myarray.push(line);
});

console.log(global.myarray);
// done

脚本输出:

dan@nia111:~/d1d2p $ 
dan@nia111:~/d1d2p $ node -v
v5.0.0
dan@nia111:~/d1d2p $ 
dan@nia111:~/d1d2p $ 
dan@nia111:~/d1d2p $ node my.js
[]
Line from file: Date,Close
Line from file: 2015-11-12,2045.97
Line from file: 2015-11-11,2075.00
Line from file: 2015-11-10,2081.72
Line from file: 2015-11-09,2078.58
dan@nia111:~/d1d2p $ 
dan@nia111:~/d1d2p $ 

我想增强脚本,使其充满global.myarray而不是空着。

当我使用逐步浏览脚本时node-debug,似乎global.myarray正在填充,但我认为这是一种幻想。

另外,当我运行node my.js时,console.log(global.myarray);

small.csv读取之前运行

因此,我可能需要在这里了解一些异步机制。

对于那些了解readline得很好的人,以下问题可能很容易

但是,我很乐意得到这个问题的答案:

如何增强my.js使其填充global.myarray而不是将其留空?

普里希德

由于它的异步特性,Node.js在这种情况下可能会有些棘手。这意味着当您的代码正在执行时,它将触发rl.on('line')处理程序并传递到下一个调用(在本例中为)console.log实际代码中的问题不是数组未填满,而是您希望将其填充到早期。这是如何解决问题的示例:

var rl = require('readline').createInterface({
  input: require('fs').createReadStream('small.csv')
});

global.myarray = [];
rl.on('line', function (line) {
  console.log('Line from file:', line);
  global.myarray.push(line);
});

rl.on('close', function () {
    console.log(global.myarray);
});

在这段代码中,当不再需要读取任何行时,console.log将调用,并且将显示一些数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

暂停Node.js中的readline

来自分类Dev

Node.JS Readline在Backspace键上打印新行

来自分类Dev

控制台上的简单node.js readline

来自分类Dev

控制台上的简单node.js readline

来自分类Dev

Node.js 使用 readline 填充数组并使用

来自分类Dev

Node.js Readline接口“暂停”事件不会暂停输入流

来自分类Dev

如何将输入传递给使用readline-sync的Node.js程序?

来自分类Dev

Node.js,将async / await与readline.on函数一起使用

来自分类Dev

在回调函数之外访问由node.js中的readline和fs解析的数据

来自分类Dev

带有 readline 的函数在获得响应之前在 for 循环中运行(Node.Js)

来自分类Dev

Node.js - 如何将 readline 答案存储在变量中

来自分类Dev

Node.js安装混淆了使用Angular.js

来自分类Dev

使用forEach时,与node.js异步流混淆。

来自分类Dev

尝试使用 node.js 中的 readline 从控制台读取输入,但应用程序不等待输入

来自分类Dev

Node.js _http_server.js'Server 函数的第一行混淆

来自分类Dev

用户输入(ReadLine())的重载方法

来自分类Dev

Node.js readline仅允许我回答我的第一组问题,然后无限期挂起。(附有可复制的样本!)

来自分类Dev

在Node.js中与q和Promise有点混淆

来自分类Dev

在Node.js中与q和Promise有点混淆

来自分类Dev

关于 node.js 中回调和 .toArray 的一些混淆

来自分类Dev

Node.js-异步方法调用问题

来自分类Dev

转换node.js流的简洁方法?

来自分类Dev

Node.js参数Length方法崩溃

来自分类Dev

加载模块node.js的最佳方法

来自分类Dev

在Node.js中缓存的最佳方法

来自分类Dev

MongoDB Node.js的每种方法

来自分类Dev

node.js中的重写方法

来自分类Dev

覆盖Node.js Express响应方法

来自分类Dev

Node.js使rsa加密的正确方法?

Related 相关文章

  1. 1

    暂停Node.js中的readline

  2. 2

    Node.JS Readline在Backspace键上打印新行

  3. 3

    控制台上的简单node.js readline

  4. 4

    控制台上的简单node.js readline

  5. 5

    Node.js 使用 readline 填充数组并使用

  6. 6

    Node.js Readline接口“暂停”事件不会暂停输入流

  7. 7

    如何将输入传递给使用readline-sync的Node.js程序?

  8. 8

    Node.js,将async / await与readline.on函数一起使用

  9. 9

    在回调函数之外访问由node.js中的readline和fs解析的数据

  10. 10

    带有 readline 的函数在获得响应之前在 for 循环中运行(Node.Js)

  11. 11

    Node.js - 如何将 readline 答案存储在变量中

  12. 12

    Node.js安装混淆了使用Angular.js

  13. 13

    使用forEach时,与node.js异步流混淆。

  14. 14

    尝试使用 node.js 中的 readline 从控制台读取输入,但应用程序不等待输入

  15. 15

    Node.js _http_server.js'Server 函数的第一行混淆

  16. 16

    用户输入(ReadLine())的重载方法

  17. 17

    Node.js readline仅允许我回答我的第一组问题,然后无限期挂起。(附有可复制的样本!)

  18. 18

    在Node.js中与q和Promise有点混淆

  19. 19

    在Node.js中与q和Promise有点混淆

  20. 20

    关于 node.js 中回调和 .toArray 的一些混淆

  21. 21

    Node.js-异步方法调用问题

  22. 22

    转换node.js流的简洁方法?

  23. 23

    Node.js参数Length方法崩溃

  24. 24

    加载模块node.js的最佳方法

  25. 25

    在Node.js中缓存的最佳方法

  26. 26

    MongoDB Node.js的每种方法

  27. 27

    node.js中的重写方法

  28. 28

    覆盖Node.js Express响应方法

  29. 29

    Node.js使rsa加密的正确方法?

热门标签

归档