服务器需要使用来自单独文件的所有数据来响应http get
。这里我使用的是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)
}
由于for循环需要一些时间才能完成,结果总是[]
,所以我考虑添加setTimeout()
和一个回调函数,但我觉得setTimeout
很糟糕方法
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)
在csv-parser完成读取后,是否有更好的方法发送所有数据?
答案 0 :(得分:0)
仅在拥有所有数据时发送回复。请参阅下面的代码,它等待result
数组的长度为4(循环的迭代次数):
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)
}
})
}
}