Skip to content

Commit 37b58db

Browse files
committed
5.3
1 parent cb68e73 commit 37b58db

File tree

1 file changed

+16
-9
lines changed
  • 05-asynchronous-control-flow-patterns-with-promises-and-async-await/11-asyncawait-web-spider-v4

1 file changed

+16
-9
lines changed

05-asynchronous-control-flow-patterns-with-promises-and-async-await/11-asyncawait-web-spider-v4/TaskQueuePC.js

+16-9
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,22 @@ export class TaskQueuePC {
99
}
1010
}
1111

12-
async consumer () {
13-
while (true) {
14-
try {
15-
const task = await this.getNextTask()
16-
await task()
17-
} catch (err) {
18-
console.error(err)
19-
}
20-
}
12+
/**
13+
* ### async/await 문법의 사용을 없에고 프로미스만을 사용하기
14+
* - 비동기적인 재귀가 되도록 하기
15+
* - 재귀적 프로미스 해결의 메모리 누수 버그 없어야함
16+
*/
17+
consumer () {
18+
return new Promise(resolve => {
19+
this.getNextTask()
20+
.then(task => task())
21+
.catch(err => console.error(err))
22+
.finally(() => { // getNextTask 와 task 가 실패하든 성공하든 이 함수는 재귀적으로 실행되어야함.
23+
// resolve(this.consumer()) 는 무한 재귀 프로미스 해결 체인의 메모리 누수 버그를 일으킬 것임.
24+
this.consumer()
25+
resolve()
26+
});
27+
});
2128
}
2229

2330
getNextTask () {

0 commit comments

Comments
 (0)