작성
·
105
0
강좌에서 resolve()까지는 비동기로 진행이 된다고 하셨는데
fs.readfile로 예를 들었을때 fsreadfile에서 resolve를 호출하려면 파일을 읽어온 값이 resolve의 인자로 들어가야하는데 그 다음 resolve가 실행되고 그다음 then이 비동기로 간다고 생각됩니다.
그럼 만약에 (편의상 fs.readfile을 프로미스 방식으로 쓰겠습니다)
fs.readFile("somefile").then((data)=>console.log(data)));
console.log("Hi");
라고 코드가 있을때
실제로 Hi가 먼저 출력되는데 fs.readFile에서 실제로 이미 데이터를 먼저 다 읽어오고 resolve()가 호출되어야 Hi가 출력되고 그다음 큐에 있는 then부분의 익명함수 console.log(data)가 호출 스택으로 와서 실행 되는 것인가요?
resolve까지 동기로 진행된다고 하셨는데 원래 노드의 장점이 파일같은것을 주고 받는 서버로써 파일 같은 주고받는 작업이 백그라운드에서 진행되어야 한다고 들었습니다,.
그런데 제가 이해한 방식은 메인 쓰레드에서 resolve까지 동기식으로 처리가 되는듯해서 질문드립니다.
답변 감사드립니다 ㅠㅠ. 근데 자꾸 궁금증이 생겨서 하나만 더 여쭤보겠습니다.
readFile의 대충 생김새는 아래와 같을까요?
promise를 반환하는 그안에 실제로 파일을 읽어오는 함수가 있고 그 함수의 콜백함수에 resolve()가 되는 방식입니다.
제 생각으로는 이렇게 생겨야 말씀해주신 것과 같이 fs.readFile을 호출하면 Promise가 생성되고 Promise 생성자의 인자로 들어간 익명함수에서 실제파일읽는내부함수가 백그라운드로가서 값을 계산하고 콜백함수에서 resolve를 호출을 합니다.