Tenho uma função que faz a leitura de um arquivo CSV, valida algumas informações e passa os resultados para uma função de callback, nessa função de callback faço a inserção desses dados no banco, porem apesar dos registros serem lidos na ordem correta eles não são inseridos na mesmo ordem. Ex:..
Leu a linha 1,2,3,4,5,6
Inseriu a linha 4,1,3,6,2,5
Como faço pra garantir que a ordem dos registros lidos permaneça na inserção dos dados ?
Seguem as funções que falei:
Função para LER arquivo CSV:
function lerCargaCSV(caminho, callback){
var input = fs.createReadStream(caminho);
var rl = readline.createInterface({
input: input,
});
var dados = [];
var resultados = [];
var linhaAtual = 0;
var erro = null;
rl.on('line', function(line){
dados = line.split(';');
if(linhaAtual == 0){
linhaAtual++;
if(dados[0] != 'ARMARIO' || dados[1] != 'CLUSTER' ||
dados[2] != 'CIDADE' || dados[3] != 'REGIONAL' ||
dados[4] != 'QNTD_FAC' || dados[5] != 'PORTE' ||
dados[6] != 'DT_INICIO'){
erro = "Cabeçalho Incorreto - Favor Verificar - Base não carregada..";
rl.close();
}
}
else{
var dataBr = dados[6].trim();
var novaData = diasUteis(dataBr, 5);
var dataAdicional = Math.round ( (Math.round ( (dados[4] / 800), 2 ) * 0.25) + Math.round ( (dados[4] / 800), 2 ) );
var campos = dados.map(function(valor, indice){
return removeAccents.remove(valor);
});
campos[6] = dataBr;
campos[7] = novaData;
campos[8] = dataAdicional;
resultados.push(campos);
}
}).on('close', function(){
input.destroy();
callback(erro, resultados);
});
};
Função do controller que chama a leitura e depois a inserção dos dados :
function fazUpload(request, response){
uploader.doUpload(request, response, function(req, res, erro){
var usuario = req.usuario.login;
if(erro){
logger.error('Usuário : ' + usuario +', erro em requisição ao fazer upload. Erro :' + erro);
res.status(500).json(erro);
}
else{
_uploadCarga(req.files, function(erro, caminhoArquivo){
if(erro){
res.status(500).json(erro);
}
else{
leitorArquivo.lerCargaCSV(caminhoArquivo, function(erro, dados){
if(erro){
res.status(500).json(erro);
}
else{
_insereDadosCarga(dados, usuario).then(function(resultado){
res.json(dados);
});
}
});
}
});
}
});
};
Função para INSERIR os dados que forma lidos:
function _insereDadosCarga(dados, usuario){
var promises = dados.map(function(item){
dao.insereCargaDados(item)
.then(function(resultado){
return resultado;
})
.catch(function(erro) {
logger.error('Usuário : ' + usuario +', erro ao Inserir Dados de Carga no Armario: ' + item[0] + '. Erro :' + erro);
});
});
return Promise.all(promises);
};