CLI에서 node.js를 사용하여 CSV 파일에서 사용자를 가져 오려고합니다.파이프 완료시 프로세스 종료
그러나 모든 작업이 완료되면 프로그램을 올바르게 종료하는 방법을 알지 못합니다. 여기
여기
"use strict";
const Sails = require('sails');
const fs = require('fs');
const csv = require('csv');
const filename = './test.csv';
Sails.load({
models : { migrate : 'safe'},
log : { level : 'info' },
hooks : { grunt : false, sockets : false, pubsub : false },
}, (errSails, sails) => {
if (errSails) process.exit(1);
let input = fs.createReadStream(filename);
let parser = csv.parse();
let transformer = csv.transform((record) => {
sails.log.debug('record : ', record);
sails.log.info('Transformer : searching user...');
return User.findOne({email: record.email})
.then((user) => {
sails.log.info('Transformer : search complete');
if (!user) {
sails.log.info('Transformer : no users found');
return User.create(record);
}
return record;
})
.catch((err) => sails.log.error(err));
});
parser
.on('readable',() => sails.log.info('Parser readable'))
.on('finish',() => sails.log.info('Parser finish'))
.on('error', (err) => sails.log.error('Parser error : ', err));
transformer
.on('finish',() => sails.log.info('Transformer finish'))
.on('error', (err) => sails.log.error('Transformer error : ', err));
input.pipe(parser).pipe(transformer).pipe(process.stdout);
//--- Exit program
// process.exit();
});
Sails.js 및 node-csv를 사용하여 내 코드가 process.exit();
없이 터미널
debug: record : { ... }
info: Transformer : searching user...
info: Parser readable
info: Parser finish
info: Transformer finish
info: Transformer : search complete
info: Transformer : no users found
안에 무엇인가, 프로그램은 영원히 계속합니다.
process.exit();
행의 주석을 제거하면 프로그램은 아무 것도 해석하지 않고 즉시 종료됩니다. 그러나이 라인을 변압기의 종료 이벤트에 넣으면 마지막 두 라인없이 info: Transformer finish
다음에 프로그램이 종료됩니다.
process.exit();
을 어떻게 종료해야 프로그램을 종료해야 내 CSV 파일의 모든 사용자가 데이터베이스에 만들어 졌는지 확인할 수 있습니다.
이것은 데모 코드입니다. 무슨 일이 일어나고 있는지를 이해하기위한 로그 만 보여줍니다. 물론 내 코드는'error' 이벤트에 에러를 던집니다. 그리고 나는'process.exit (1);'을'finish' 이벤트에 넣으면 변압기가 비동기 처리를 끝내지 않아도 코드가 멈춘다 고 말했습니다. – Martial
나는 당신의 코드를 꽤 잘 보았다. finish 이벤트에 process.exits를 추가하려고 시도 했습니까? –
그래, 그랬지. 만약 그렇다면,'User.findOne ({email : record.email}). 그때 ((사용자) => {/ * 여기 * /});)의 모든 것은 Transformer의' 'finish' 이벤트가'csv.transform()'에서 비동기 처리가 완료되기 전에 호출됩니다. – Martial