带有请求和响应的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)
}
})
}
}