흐음 ,,
자스 프로미스 왤케 이해가 안가냐
익명(220.75)
2022-05-27 19:15
추천 0
댓글 11
다른 게시글
-
디씨갤 만든샠이 삭제할때 비번치는 건 왜 form으로 안해두냐익명(182.230) | 22.05.27추천 0
-
돈..ㅇㅅㅇ?? 돈 그게 모야?? 난 가져본적이 없어서 그게몬지 몰라 [1]익명(123.213) | 22.05.27추천 0
-
삼전 코테 결과 나왔는데 [2]익명(118.235) | 22.05.27추천 0
-
도커 쓰는 개발 환경 기초적인 질문점 [2]익명(119.207) | 22.05.27추천 0
-
요즘 한녀들 특징 ㅇㅅㅇ [1]익명(118.33) | 22.05.27추천 0
-
이거 온놈 있냐? [4]17번(118.235) | 22.05.27추천 0
-
오늘 공부 0시간 [3]익명(182.230) | 22.05.27추천 0
-
프로그래밍에 뜻있는 게이인데 질문좀 [5]익명(121.162) | 22.05.27추천 0
-
개발자라면 진짜 키워야 할거익명(39.7) | 22.05.27추천 0
-
요즘은 이러다 사람 삐뚫어지는거 순간이구나 싶음82 ㄱㅈㅇ(175.194) | 22.05.27추천 1
프로미스는 그냥 비동기 로직처리하려고 만든 객체임
promise는 use case->definition순으로 이해하는게 맞는 듯
promise 객체가 비동기 함수 처리에 관한 여러 처리를 할 수 있는 메서드와 속성들을 가지고 있고 우리는 그 메서드들을 이용해서 비동기 로직을 동기 로직처럼 처리할려고 Promise를 사용함
예를 들어서 then 같은 경우는 Promise 객체의 메서드로서 이전 Promise 객체의 콜백 함수 처리가 완료되면 그 후에 뭔가를 실행함.
그래서 Promise.then().then() 의 형태로 promise 체인을 형성하면 비동기 로직을 동기적 코드, 로직처럼 보이게 할 수 있음
물론 프로미스 체인을 하게 되면 그 체인 안에 존재하는 모든 실행 함수와 그것을 정상적으로 실행하기 위해 필요한 여러 정보들이 담긴 Promise 객체 하나가 생성되게 됨. 내부적으로 도는 방식을 비유해보자면 마치 첫 promise 객체가 생성자를 통해 넘겨 받은 실행 함수를 호출한 후 그 함수 내부에서 resolve나 reject를 호출하면, 그 다음 then 메서드에 넘겨진 실행 함수를 호출하고... 이런 식으로 이어지게 됨.
그리고 promise 객체는 생성될 때 일단 실행 함수를 바로 실행하게 됨. 그래서 비동기 작업이 아닌 동기적인 작업을 실행 함수에 넘기게 되면 바로 fullfiled 상태가 되면서 이행 완료되는 것을 확인할 수 있음. 하지만 then 메서드가 존재할 경우 동기 작업이 끝날 때까지 기다린 후 실행하게 됨.
그래서 new Promise((resolve, reject) => { console.log(5); resolve(5); }).then(result => console.log(result)); console.log(10); 이러한 코드의 경우, 5, 10, 5 가 출력되는 것을 확인할 수 있음.
어쨌든 그러므로 동기적인 코드를 굳이 promise를 이용해서 실행하기보다는, 비동기 작업과 관련된 것에만 사용하는 게 좋음.
그리고 Promise.all 메서드는, 비동기적인 작업을 한 번에 묶어서 실행하고 모두 완료될 때까지 기다림으로써, 서로 상관 없는 비동기 작업 여러 개를 빠르게 실행할 때 좋음. async await와 for문, 혹은 map 메서드를 이용해서 실행하는 경우에는 Promise.all보다 느리게 처리될 수 있음.
promise는 functor인것... array의 map 역할을 promise에서는 then이 함. - dc App