Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在nodejs readline过程中更新html页面_Javascript_Html_Node.js_Node Webkit - Fatal编程技术网

Javascript 如何在nodejs readline过程中更新html页面

Javascript 如何在nodejs readline过程中更新html页面,javascript,html,node.js,node-webkit,Javascript,Html,Node.js,Node Webkit,我想在nodejs readline过程中动态更改html页面中元素的内容 下面是一个JSFIDLE示例,展示了我想要实现的显示效果: 但是我希望动态显示本地文件中的行,而不是像JSFIDLE示例中那样显示函数中定义的数组中的行 我在读取文件版本clickTest()函数中使用了readline模块: function clickTest(){ var fs = require('fs'); var lineReader = require('readline').createInte

我想在nodejs readline过程中动态更改html页面中

元素的内容

下面是一个JSFIDLE示例,展示了我想要实现的显示效果:

但是我希望动态显示本地文件中的行,而不是像JSFIDLE示例中那样显示函数中定义的数组中的行

我在读取文件版本clickTest()函数中使用了readline模块:

function clickTest(){
  var fs = require('fs');
  var lineReader = require('readline').createInterface({
    input: fs.createReadStream(filePath)
  });

  lineReader.on('line', function(line){
    document.getElementById("demo").innerHTML += line;
  });
}

但是当我单击按钮时,页面就像被冻结一样,然后这些行同时显示(而不是像上面的JSFIDLE示例中所示的那样一行一行地显示)

首先,每次调用该函数时,都会执行
require('readline')
require('fs')
,因此我会在脚本中将其上移

我建议采取两种办法:

暂停阅读

var readline = require('readline');
var fs = require('fs');

function clickTest(){
  var lineReader = readline.createInterface({
    input: fs.createReadStream(filePath)
  });

  lineReader.on('line', function(line){
    // pause emitting of lines...
    lineReader.pause();

    // write line to dom
    document.getElementById("demo").innerHTML += line;

    // Resume after some time
    setTimeout(function(){
      lineReader.resume();
    }, 1000);
  });

  lineReader.on('end', function(){
    lineReader.close();
  });
}
这种方法应该读一行,然后在指定的时间后暂停并继续

缓冲线

var readline = require('readline');
var fs = require('fs');
var lines = [];

function clickTest(){
  var lineReader = readline.createInterface({
    input: fs.createReadStream(filePath)
  });

  lineReader.on('line', function(line){
    lines.push(line)
  });

  lineReader.on('end', function(){
    lineReader.close();

    printLine(0);
  });
}

function printLine(index){
  // write line to dom
  document.getElementById("demo").innerHTML += lines[index];

  if (index < lines.length - 1){
      setTimeout(function(){
        printLine(index + 1); 
      }, 1000);
  }
}
var readline=require('readline');
var fs=需要('fs');
var行=[];
函数clickTest(){
var lineReader=readline.createInterface({
输入:fs.createReadStream(文件路径)
});
lineReader.on('line',函数(line){
线。推(线)
});
lineReader.on('end',function(){
lineReader.close();
打印线(0);
});
}
函数打印行(索引){
//将行写入dom
document.getElementById(“demo”).innerHTML+=行[索引];
如果(索引
这种方法将把所有行保存到一个数组中,然后慢慢地打印出来


请注意,我还没有实际测试node webkit,因此您可能会在代码中发现一个bug,但它应该能让您大致了解

您在这里混合了服务器端和客户端操作。您不能在客户端上使用fs模块读取文件,而在节点上,您可以读取整个文件,然后将其发送到客户端。所以,您可能希望读取整个文件并将其发送到客户机,然后客户机设置时间间隔,或者打开套接字发送到客户机,并保持从节点到服务器的线路按原样发送read@Tom实际上,我已经使用了fs模块来读取文件(为什么不能?)。我的问题是如何在html页面中显示内容。您是否清楚地理解客户端和服务器之间的区别?只要我知道你不能读取客户端的本地文件(除非你在文件输入中明确选择它们)@Tom哦,天哪,伙计。。。原谅我,我不认为你说的和我的问题有任何联系。好吧,让它成为事实,就像你说的,我可能不知道客户端和服务器之间的区别。但实际上我已经逐行读取了本地文件——我可以使用console.log在devTool中输出这些行。我的问题是如何在我的HTML页面中动态输出这些行(每次只输出一行)。。。您上面发布的代码不会在您的客户端(浏览器)中运行。如果我没有弄错的话,没有
require
fs
。两者都是特定于节点的。是的,如果您特别允许用户选择本地文件并使用html5文件API,您可以读取本地文件。如果你有那个代码,把它贴在这里,我可以帮你修复它。否则,您认为您是在客户机上完成的,但实际上是在服务器上完成的(即使它的本地主机仍然是服务器),非常感谢。我的文件包含多达1000万行。所以我只能遵循第一种方法。每秒写一行1000万行?听起来像是可怕的用户体验对我来说。。。10万行每秒打印一行需要116天才能打印出来。