Javascript 对于包含内容的数组,为什么数组长度为零?
这是我的密码:Javascript 对于包含内容的数组,为什么数组长度为零?,javascript,arrays,node.js,electron,Javascript,Arrays,Node.js,Electron,这是我的密码: <script type="text/javascript" src="read.js"></script> <script> var beats=[] beats=read('heartRate.txt') console.log(beats) //label 1 console.log(beats.length) //label 2 for (i = 0; i < beats.length
<script type="text/javascript" src="read.js"></script>
<script>
var beats=[]
beats=read('heartRate.txt')
console.log(beats) //label 1
console.log(beats.length) //label 2
for (i = 0; i < beats.length; i++) {
console.log(beats[i])
if(parseInt(beats[i])>80 || parseInt(beats[i])<50){
document.getElementById('Alert').innerHTML('Abnormal heartrate of '+parseInt(beats[i]))
}
}
console.log(beats)
</script>
标签1:控制台中打印的值显示数组及其内容
标签2:数组的长度显示为0。
有没有办法找到数组的大小
控制台图像附于此处:
我想这是因为read()函数是异步的,需要一些时间才能完成执行。最初,长度打印为零,然后是实际值5。尝试从read()函数返回一个承诺,看看它是如何工作的
function async read(filename){
var fs = require('fs');
var readline = require('readline');
var stream = require('stream');
var str =[]
var instream = fs.createReadStream(filename);
var outstream = new stream;
var rl = readline.createInterface(instream, outstream);
rl.on('line', function(line) {
//console.log(line+'\n')
str.push(line)
});
rl.on('close', function() {
// do something on finish here
console.log(str.length)
});
return str;
}
var beats=[]
读取('heartRate.txt')。然后(函数(数据){
节拍=数据
//在这里做你的事
})
不起作用,因为
console.log(beats) //label 1
console.log(beats.length)
读取是异步进行的,只有在
rl.on('line', function(line) {
//console.log(line+'\n')
str.push(line)
});
将其添加到关闭(
rl.on(
)。您应该让read
返回一个承诺,并且仅在加载完所有数据后使用数据:
函数读取(文件名){
返回新承诺((解决、拒绝)=>{
常数fs=要求(“fs”);
const readable=fs.createReadStream(文件名);
让数据=[];
readable.on('data',chunk=>{
数据推送(块);
});
可读。on('end',()=>{
解析(数据);
});
可读。on('error',err=>{
拒绝(错误);
});
}
}
您可以这样使用它:
读取('heartRate.txt')。
然后(节拍=>{
console.log(beats)//标签1
console.log(beats.length)//标签2
对于(i=0;i80 | | parseInt(beats[i])console.log(`Oh no,发生了一个错误:${err}`));
此读取函数似乎是一个异步函数。您如何同步使用它?出于好奇,您确定beats.length
是未定义的?Javascript数组必须具有数字长度属性(请参见:)。在您的代码中读取()
返回一个空数组,该数组可以/将在下一个节拍中填充。这意味着节拍。长度
应该是0
,而不是未定义
!它不是未定义的,它打印为零
console.log(beats) //label 1
console.log(beats.length)
rl.on('line', function(line) {
//console.log(line+'\n')
str.push(line)
});