fsreadfile 같은 비동기 함수의 작동방식질문
139
작성한 질문수 4
강좌에서 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까지 동기식으로 처리가 되는듯해서 질문드립니다.
답변 1
1
fs.readFile('somefile')이 실행된 다음에 fs.readFile 부분은 백그라운드로 가고요. 그 다음에 console.log('hi')가 되고, 백그라운드에서는 somefile을 열심히 읽고 있습니다. 그 후 다 읽은 다음에 프로미스 내부에 존재하는 resolve가 실행되어 태스크큐를 거쳐 then부분이 실행됩니다.
0
답변 감사드립니다 ㅠㅠ. 근데 자꾸 궁금증이 생겨서 하나만 더 여쭤보겠습니다.
readFile의 대충 생김새는 아래와 같을까요?
promise를 반환하는 그안에 실제로 파일을 읽어오는 함수가 있고 그 함수의 콜백함수에 resolve()가 되는 방식입니다.
제 생각으로는 이렇게 생겨야 말씀해주신 것과 같이 fs.readFile을 호출하면 Promise가 생성되고 Promise 생성자의 인자로 들어간 익명함수에서 실제파일읽는내부함수가 백그라운드로가서 값을 계산하고 콜백함수에서 resolve를 호출을 합니다.
function readFile('../somefile') {
// new Promise() 추가
return new Promise(function(resolve, reject) {
실제파일읽는내부함수('../somefile', function(response) {
// 데이터를 받으면 resolve() 호출
resolve(response);
});
});
}
리눅스 노드 설치시 패키지
0
172
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
926
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2297
2
a[title] 질문드립니다
0
386
1
리뉴얼 강의 및 공부 방법
0
589
1
jwt decode
0
1137
1
node.js 교과서 3판 질문드립니다
0
396
1
passport와 jwt
0
438
1
리뉴얼 강의
0
427
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
359
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
488
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
511
2
nunjucks res.render('error'); 작동을 안합니다.
0
518
1
질문있습니다.
0
348
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3543
1
수업자료는 어디있나요?
0
374
1
질문 있습니디
0
244
1
multer 사용시 file 외 name값은 못받나용?
0
429
1
코드 중복 부분 질문드립니다.
0
303
1
api 만드는 이유 질문드립니다.
0
292
1
Strategy의 done에 대해 질문드립니다.
0
373
1
안녕하세요 fs 권한 관련 질문드립니다
0
455
1
시퀄라이즈 연결질문...
0
510
2
res.setHeader vs res.cookie
0
1797
3





