作为临时方法,我使用.txt文件来存储程序的某些变量。写作与fs.appendFile
完全吻合,但考虑到它的大小,使用fs.readFile
阅读并不合适 - 我想从文件中获取某一行,并且{ {3}}被告知我可能有所帮助。
function YTAPP_LBL_SetValueToLine(path, lineid, value){
var lr = new lblreader(path);
var m = 0;
lr.on('line', function (line) {
// 'line' contains the current line without the trailing newline character.
m=+1;
if(m==lineid){ value = line; };
});
};
调用本身就像通常的函数调用一样,所有输入变量肯定正确。
我应该认为这不是一个合适的方法,但文档说,这是同步方法。但是,我可以看到.on的工作是asysnc,因为它需要的函数输入。
不确定它是否与问题有关,但无论如何,console.log
在函数调用之后始终表明该变量尚未更改。
我该怎么做?
答案 0 :(得分:1)
您可以使用Core Node API提供的Readline
模块。
逐行的Readline API示例
const readline = require('readline'); const fs = require('fs'); const rl = readline.createInterface({ input: fs.createReadStream('sample.txt') }); rl.on('line', (line) => { console.log('Line from file:', line); });
以上示例取自Node Readline API Docs
答案 1 :(得分:1)
变量没有改变,因为videoid
是按值传递的。这意味着函数内的任何更改都不会反映在变量本身上。
例如:
function increment(num) {
num++;
}
var a = 1;
increment(a);
console.log(a); // 1
要传入一个可由函数更改的变量,您需要传入一个对象类型。
例如:
function increment(num) {
num.val++;
}
var a = {val: 1};
increment(a);
console.log(a); // Object {val: 2}
要将此功能应用于您的计划,您需要创建一个对象来保存videoid
,并在您完成阅读时关闭该流:
var videodata = {videoid: 'someID'};
function YTAPP_LBL_SetValueToLine(path, lineid, viddata){
var lr = new lblreader(path);
var m = 0;
lr.on('line', function (line) {
// 'line' contains the current line without the trailing newline character.
m += 1;
if(m == lineid){
viddata.videoid = line;
// Close the stream
lr.close();
}
});
};