-
node.js에서 파일 등을 읽어서 객체를 생성할 때프로그래밍/의문 2017. 7. 26. 10:13반응형
객체가 생성되는데, 파일을 읽어서 초기화 시키고 싶었다. 왜냐면 깔끔하게 보이니까.
const object = new AnyObject("config.json");
근데 AnyObject 생성자에 readFile등의 비동기 동작이 있었다면 어떨까
class AnyObject{
constructor(fileName){
fs.readFile(...);
}
}
물론 fs엔 readFileSync가 있다지만 그건 이 상황에 대한 근본적인 해결이 아니다. 만약 sync 함수가 지원되지 않는다면 어쩔건데?
그에 여기에 대한 좋은 의견이 있다.
Is it bad practice to have a constructor function return a Promise?
Ask yourself: Do you actually need the instance without the data? Could you use it somehow?
결론적으로 일단 데이터는 외부에서 읽고, 읽은 데이터를 바탕으로 AnyObject를 초기화 시키는 것이 가장 좋다는 것이다.
const fs = require("fs");class Object{constructor(name, hp){this.name = name;this.hp = hp;}print(){console.log(`name: ${this.name} hp: ${this.hp}`);}static createObjectFromFile(fileName){return new Promise((resolve, reject)=>{fs.readFile(fileName, (err, data)=>{if(err){reject(err);}else{var newObject = new Object("boo", 100);resolve(newObject);}});});}}// 안 좋은 케이스!//const object = new Object("config.xml");// 좋은 케이스!Object.createObjectFromFile("config.xml").then(obj=>obj.print()).catch(err=>console.log(err));반응형'프로그래밍 > 의문' 카테고리의 다른 글
visual studio code 기본 셸 선택 (0) 2017.08.06 윈도우 환경에서 putty로 ubuntu 계정 접속 시 Disconnected: No supported authentication methods available (server sent: publickey) 오류 해결 (7) 2017.07.28 윈도우10 시작 버튼이 안 켜지는 경우 해결 (0) 2017.05.15 Razer chroma sdk server는 80번 포트를 점유한다. (0) 2017.05.06 윈도우에서 현재 특정 포트를 사용하는 프로세스 알아내기 (1) 2017.05.06