Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.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回调函数_Javascript_Jquery_Csv - Fatal编程技术网

带有请求和响应的javascript回调函数

带有请求和响应的javascript回调函数,javascript,jquery,csv,Javascript,Jquery,Csv,服务器需要使用单独文件中的所有数据响应httpget。这里我使用的是csv解析器 function sendFileData(req, res) { var result = [] // Convert an csv file to Json entries for (var i = 0; i < 4; i++) { var dataArray = [] csvFilePath = ... time

服务器需要使用单独文件中的所有数据响应
httpget
。这里我使用的是csv解析器

   function sendFileData(req, res) {

      var result = []
      // Convert an csv file to Json entries
      for (var i = 0; i < 4; i++) {
        var dataArray = []
        csvFilePath = ...
        time = '"'
        value = '""'
        fs.createReadStream(csvFilePath)
         .pipe(csv({headers: ['date', 'time', 'value']}))
         .on('data', function (data) {
           date = ...
           time = ...
           value = ...
           dataArray.push('{' + date + time + value + '}')
         })
         .on('end', function () {
           var sensorData = '[' + dataArray + ']' 
           result.push(sensorData)
         })
      }
      res.send(result)
    }

是否有更好的方法在csv解析器完成读取后发送所有数据?

仅当您拥有所有数据时才发送响应。请参阅下面的代码,该代码将等待
结果
数组的长度为4(循环的迭代次数):

函数sendFileData(req,res){
var结果=[]
//将csv文件转换为Json条目
对于(变量i=0;i<4;i++){
var dataArray=[]
csvFilePath=。。。
时间=“”
值=“”“
fs.createReadStream(csvFilePath)
.pipe(csv({标题:['date','time','value']}))
.on('data',函数(data){
日期=。。。
时间=。。。
值=。。。
dataArray.push(“{”+日期+时间+值+“}”)
})
.on('end',函数(){
var sensorData='['+dataArray+']
结果。推送(传感器数据)
剩余-=1
如果(result.length==4){//全部完成
res.send(结果)
} 
})
}
}

Yes,在异步操作完成之前不要发送结果,例如,在
end
事件中。在最后的回调中调用
res.send
end
回调)。查看链接问题的答案以了解原因。Settimeout绝对是一种不好的方法。请查看
异步
库,它会让您的生活更轻松。我可以将res.send()放在在for循环中?@Deidara:不,你需要等到得到所有结果。这至少包含在链接问题的一个答案中。我可以将res.send()放入for循环中吗?哦,对不起。你只需要在所有迭代完成后才发送结果。请参阅更新的代码。
   function sendFileData(req, res, callback) {

      var result = []
      // Convert an csv file to Json entries
      for (var i = 0; i < 4; i++) {
        var dataArray = []
        csvFilePath = ...
        time = '"'
        value = '""'
        fs.createReadStream(csvFilePath)
         .pipe(csv({headers: ['date', 'time', 'value']}))
         .on('data', function (data) {
           date = ...
           time = ...
           value = ...
           dataArray.push('{' + date + time + value + '}')
         })
         .on('end', function () {
           var sensorData = '[' + dataArray + ']' 
           result.push(sensorData)
         })
      }

    setTimeout(function () {
     callback(res, result)
    }, 1000)

}

function sendData (res, result) {
  res.send(result)
}

// calling function
sendFileData(req, res, sendData)
function sendFileData(req, res) {
  var result = []
  // Convert an csv file to Json entries
  for (var i = 0; i < 4; i++) {
    var dataArray = []
    csvFilePath = ...
    time = '"'
    value = '""'
    fs.createReadStream(csvFilePath)
     .pipe(csv({headers: ['date', 'time', 'value']}))
     .on('data', function (data) {
       date = ...
       time = ...
       value = ...
       dataArray.push('{' + date + time + value + '}')
     })
     .on('end', function () {
       var sensorData = '[' + dataArray + ']'
       result.push(sensorData)
       remaining -= 1
       if (result.length === 4) {  // all done
        res.send(result)
       } 
     })
  }
}