【发布时间】:2017-03-02 01:41:46
【问题描述】:
一旦fs.readFile 循环遍历所有文件并获取匹配数据并将其推送到结果中,我想调用callback(results) 以便向客户端发送响应。我收到以下代码Error: Callback is already called 的错误我如何使用async 方法解决此问题。
app.js
searchFileService.readFile(searchTxt, logFiles, function(lines, err) {
console.log('Logs', lines);
if (err)
return res.send();
res.json(lines);
})
readFile.js
var searchStr;
var results = [];
function readFile(str,logFiles,callback){
searchStr = str;
async.map(logFiles, function(logfile, callback) {
fs.readFile('logs/dit/' + logfile.filename, 'utf8', function(err, data) {
if (err) {
callback(null,err);
}
var lines = data.split('\n'); // get the lines
lines.forEach(function(line) { // for each line in lines
if (line.indexOf(searchStr) != -1) { // if the line contain the searchSt
results.push(line);
callback(results,null);
}
});
});
}), function(error, result) {
results.map(result,function (result){
console.log(result);
});
};
}
【问题讨论】:
-
尝试反转参数:callback(results, null);结果正常
-
在 app.js 中我尝试传递第一个错误,例如
function(err,lines) -
是的,但是当一切正常时,参数被反转
标签: javascript node.js async.js