본문 바로가기

promise5

[4주차] Promise 2월 9일 자 학습 내용 정리입니다. ✅ Promise Promise는 비동기 작업을 표현하는 자바스크립트의 객체로 비동기 작업의 진행(pending), 성공(fulfilled, resolved), 실패(rejected) 상태를 표현한다. 즉, 비동기 처리의 순서를 표현할 수 있다. let error = false; const promise = new Promise((resolve, reject) => { if(!error) resolve("success"); else reject("error"); }); Promise의 생성자는 new Promise(callback)이며 callback 함수는 resolve와 reject의 두 가지 인자를 받는다. Promise가 성공하면 resolve를 호출하고 실패.. 2022. 2. 9.
[FP&ES6+] Klesli Composition 관점에서의 Promise 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✅ Klesli Composition 관점에서의 Promise Promise는 Klesli Composition을 지원하는 도구이다. Klesli Composition은 오류가 있을 수 있는 상황에서 함수 합성을 안전하게 하기 위한 하나의 규칙이다. 오류가 있을 수 있는 상황은 여러 가지가 있는데 들어오는 인자가 잘못된 값이라 함수에서 오류가 나는 상황과 정확한 인자가 들어왔더라도 함수가 의존하고 있는 외부의 상태에 따라 결과를 정확히 전달할 수 없는 상황이 대표적이다. Klesli Composition은 위와 같은 상황을 안전하게 해결하기 위해 존재한다. f(g(x)) = f(g(x)) f·g에 대해 수학적으로 위의 식은 .. 2022. 1. 5.
[FP&ES6+] 합성 관점에서의 Promise와 Monad 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✅ 합성 관점에서의 Promise 결론부터 이야기하자면 Promise는 비동기 상황에서 함수 합성을 안전하게 하기 위한 도구이자 모나드이다. 함수 합성이란 f · g을 말하며 g 함수를 먼저 적용한 결괏값에 f 함수를 적용하는 것이다. x라는 값이 있다고 할 때 f · g는 f(g(x))와 같다. 연속적으로 함수가 실행되고 함수 합성을 할 때 상황에 따라 안전하게 합성할 수 있게 하기 위해 모나드라는 개념이 필요하다. 그리고 그 구현체 중 비동기 상황을 안전하게 합성하기 위해 Promise를 사용한다. 즉, Promise는 모나드의 일종이다. ✅ Monad 모나드(Monad)는 값을 담는 컨테이너의 일종이며 Functor를 .. 2022. 1. 5.
[FP&ES6+] 일급 값으로의 Promise 활용 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✏️ 예제 const go1 = (a, f) => f(a); const add5 = (a) => a + 5; console.log(go1(10, add5)); // output // 15 go1 함수는 값과 함수를 인자로 받아 함수에 값을 적용한 결과를 단순 리턴하는 함수이다. go1 함수가 제대로 동작하려면 다음과 같은 전제 조건이 필요하다. 인자로 주어지는 함수 f가 동기적으로 동작해야 한다. 인자로 주어지는 값 a가 동기적으로 바로 값을 알 수 있는 값이어야 한다. 즉, go1 함수의 인자로 비동기 상황이 일어난 값이 아닌(Promise가 아닌) 값이 들어와야 정상적으로 원하는 결과를 얻을 수 있다. console.lo.. 2022. 1. 3.
[FP&ES6+] callback, Promise를 이용한 비동기 동시성 프로그래밍 함수형 프로그래밍과 JavaScript ES6+ 강의를 듣고 정리한 내용입니다. ✅ callback을 이용한 비동기 동시성 프로그래밍 callback은 함수에 파라미터로 들어가는 함수이다. 코드를 순차적으로 실행하고 싶을 때 콜백 함수를 사용한다. 자바스크립트는 특성상 비동기적으로 처리되기 때문에 함수의 실행을 순차적으로 작성했다고 하더라도 이 함수들이 해당 순서대로 동작하는 것은 보장할 수 없다. 따라서 순서를 확실하게 보장하고 싶은 경우 먼저 실행할 함수에 다음 실행할 함수를 인자로 넣어 순차적으로 실행하게 하는 것이다. function add10(a, callback) { setTimeout(() => callback(a + 10), 100); } add10(5, (res) => { console... 2022. 1. 2.