当前位置: 首页 > 面试题库 >

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

傅英喆
2023-03-14
问题内容

我对从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将调用,并且将显示一些数据。



 类似资料:
  • 问题内容: 我有一个如下所示的集合,我想过滤掉除月末以外的所有内容。 我有以下过滤条件。返回给定月份的匹配项。 所以现在我想我必须将此过滤后的流转换回地图。我想我使用收集器来做到这一点。因此,我添加: 但是我不知道该怎么办。阅读示例会让我感到困惑。这是我当前的代码,显然不起作用。 问题答案: 除了前面的答案外,请注意,如果您不需要保留原始地图,则可以在不使用Stream API的情况下就地执行此类

  • 我尝试在android studio中使用Proguard,但Proguard似乎没有混淆类名,例如,我的应用程序结构和配置: 和配置 但当我尝试在应用程序中触发异常时: ADB控制台中列出了异常: 只有方法被混淆了,MainActivity.class没有

  • 我尝试了以下代码,但不理解输出: 输出:字符串 为什么? 感谢您的关注!

  • 问题内容: 我对此代码有两个问题 1)函数f在Override po的引用上如何可见; 2)为什么输出“ private f()” 问题答案: 该方法在班级内部,因此当然可以看到班级的私有成员。 您 没有在类中重写方法,没有多态。变量的类型为,因此它将采用class中的方法。 注意class 中的方法在class中根本不可见。该方法在课堂上是一种不同的方法,不具有任何与该方法在超类。

  • 而RNDecryptor的addData方法如下: 我不明白这一行实际上是要做什么,它对加密流的每一个块都调用: 假设我有一个1000字节的块,而HMACLength是32。 提前道谢。

  • 我已经阅读了几篇关于proguard混淆的stackoverflow帖子 如何在使用ProGuard时保留/排除特定的包路径? 如何让Proguard忽略外部库? 如何在使用proguard进行混淆时从injar中排除特定的jar? 但我没有找到答案来排除一个特定的目录,以防止混淆。