如何在调用它的函数结束时执行回调
How to execute the callback at the end of the function calling it?
在我的 Node js 应用程序中,我有一个函数,它逐行读取文件,将文件的内容存储在数组中,然后调用回调函数并将数组传递给回调。
function readFile(callback)
{
var fs = require('fs'), readline = require('readline');
var rd = readline.createInterface({
input: fs.createReadStream('./file.txt'),
output: process.stdout,
terminal: false
});
var data = [];
rd.on('line', function(line) {
data.push(line);
});
callback(data);
}
我面临的问题是readFile
在读取文件并填充data
数组之前运行回调。因此,回调以空数组运行。阵列完全填满后如何让它运行?谢谢。
readline 有一个在"end"触发的关闭事件
所以,你的代码应该是
function readFile(callback) {
var fs = require('fs'), readline = require('readline');
var rd = readline.createInterface({
input: fs.createReadStream('./file.txt'),
output: process.stdout,
terminal: false
});
var data = [];
rd.on('line', function(line) {
data.push(line);
}).on('close', function () {
callback(data);
});
}
在ES2015中:
function readFile(callback) {
var fs = require('fs'), readline = require('readline');
var rd = readline.createInterface({
input: fs.createReadStream('./file.txt'),
output: process.stdout,
terminal: false
});
var data = [];
rd.on('line', line => data.push(line)).on('close', () => callback(data));
}
甚至
function readFile(callback) {
var fs = require('fs'),
readline = require('readline'),
data = [];
readline.createInterface({
input: fs.createReadStream('./file.txt'),
output: process.stdout,
terminal: false
})
.on('line', line => data.push(line))
.on('close', () => callback(data));
}
但我不确定两个ES2015代码中哪一个更具可读性
相关文章:
- 当*ngFor以角度2结束时执行函数
- Javascript渲染.如何编写Javascript;t在函数调用结束之前继续执行代码
- 如何在javascript中循环结束后执行语句
- 动画结束时执行动画
- 在脚本执行结束时关闭弹出窗口
- AngularJS:在超时结束后执行函数
- Jquery 执行函数 第三方函数结束后
- 检测不提供回调的异步函数的执行结束
- 如何在调用它的函数结束时执行回调
- 如何要求 javascript 等待执行外部应用程序结束
- 如何使 PHP 函数等到脚本结束执行
- 当for循环结束时,Javascript执行一个操作
- 在所有cordova.exec函数结束后执行成功回调
- 在循环XMLHttpRequest结束时执行回调
- 如何通过正确切换在最长执行时间结束时给出用户定义的超时消息
- 防止第二次执行,直到第一次执行在jquery中结束
- 等待循环结束并执行第二个函数
- 如何在第一个匹配的路由发送响应后结束node.js的执行
- 如果窗口.位置以HTML结束,执行javascript
- 如何“等待”?在jplayer中执行代码直到歌曲结束