Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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/7/user-interface/2.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中使用回调异步接收多个响应?_Javascript_Node.js_Callback_Fs - Fatal编程技术网

Javascript 如何在nodejs中使用回调异步接收多个响应?

Javascript 如何在nodejs中使用回调异步接收多个响应?,javascript,node.js,callback,fs,Javascript,Node.js,Callback,Fs,一旦我从客户端获得了参数,我想匹配文件系统中的字符串,并将匹配的数据发送回客户端。我试图熟悉回调,因此在下面的代码中,当我调用回调时,它会向我发送带有正确数据的响应,但它会抛出一个错误-请参见下面粘贴的代码之后的内容 app.js: service.js: 函数readFile(str、日志文件、回调){ searchStr=str; for(var i=0;i您的回调函数会被多次调用,因为它位于for循环中 第一次运行时,它将发送响应 第二次运行时,它将抛出错误(因为已发送响应) 您需要重构代

一旦我从客户端获得了参数,我想匹配文件系统中的字符串,并将匹配的数据发送回客户端。我试图熟悉回调,因此在下面的代码中,当我调用回调时,它会向我发送带有正确数据的响应,但它会抛出一个错误-请参见下面粘贴的代码之后的内容

app.js: service.js:
函数readFile(str、日志文件、回调){
searchStr=str;

for(var i=0;i您的
回调
函数会被多次调用,因为它位于
for
循环中

第一次运行时,它将发送响应

第二次运行时,它将抛出错误(因为已发送响应)

您需要重构代码,以便仅在解析所有
fs.readFile
实例后发送响应


问题中给出了该问题的一般解决方案:

您的
回调
函数会被多次调用,因为它位于
for
循环中

第一次运行时,它将发送响应

第二次运行时,它将抛出错误(因为已发送响应)

您需要重构代码,以便仅在解析所有
fs.readFile
实例后发送响应


问题中给出了该问题的一般解决方案:

“它的抛出错误”-什么错误?!它可能重复抛出此错误:_http\u outgoing.js:344抛出新错误('发送后无法设置头')^错误:发送后无法设置标题。@JaredSmith-不是重复的。可能是重复的@Quentin你比我更正确。但两者的答案相同。“它的抛出错误”-什么错误?!可能是重复的抛出此错误:_http\u outing.js:344抛出新错误(“发送后无法设置标题”。);^Error:发送后无法设置标题。@JaredSmith-不是重复的。可能是重复的@Quentin。你比我更正确。不过,两个答案都一样。
        app.get('/serverSearch', function (req, res) {
            var searchTxt = req.query.searchTxt;
            dirDirectory.readDirectory(function(logFiles){
                // res.json(logFiles);
                if(logFiles){
                    searchFileService.readFile(searchTxt,logFiles,function(lines,err){
                                console.log('Logs',lines);
                                  if (err)
                                   return res.send();
                                   res.json(lines);
                            })
                }
            });
            console.log('Search text', searchTxt);
        });
function readFile(str,logFiles,callback){
    searchStr = str;
    for(var i=0; i<logFiles.length; i++){
        if(logFiles[i].filename !== '.gitignore'){
            fs.readFile('logs/dit/' + logFiles[i].filename, 'utf8', function (err,data) {
              if (err) {
                return console.log(err);
              }
              inspectFile(data,callback);
              callback(result);
              result = [];
            });
        }
    }

}

function inspectFile(data,callback) {
    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
            result.push(line);
            // then log it
            return line;
        }
    });
    cb(callback);
}

function cb (callback) {
    callback(result);
}