👋 Promise 인스턴스 생성


1. new Promise()

  • Promise 인스턴스를 생성하여 반환함
  • 파라미터 실행자(excuter) 함수를 작성함

    • 성공, 실패 처리 함수 이름
    • 실행자 코드
    const obj = new Promise((resolve, reject) => {
      resolve('성공');
      reject('실팽');
    });
    
    obj.then(
      (value) => {
        console.log(value);
      },
      (reason) => {
        console.log(reason);
      },
    );
    
    console.log('끝');
    
    // 1. const obj = new Promise((resolve, reject) => {...} Promise 인스턴스를 생성하여 obj에 할당함
    // 2. resolve와 reject 이름의 Function 오브젝트를 생성하여 인스턴스에 설정함
    // 3. resolve("성공"); reject("실팽"); 실행자 처리를 성공하면 resolve()가 호출되고 실패하면 reject()가 호출됨
    // 4. 지금 호출하지 않고 코드 끝까지 실행한 후 호출함
    // 5. 이것이 Promise의 비동기 처리(실행) 임
    // 6. obj.then((value) => {.1.}, (reason) => {.2.}): then()을 실행하지 않음 아래로 내려 감
    // 7. console.log("끝")을 실행함 여기서 전체 흐름이 끝나지만 실행자의 resolve()와 reject() 실행이 남았음
    // 8. 실행자에서 resolve("성공") 또는 reject("실패")를 호출함 상태가 하나만 발생하므로 상태에 해당하는 함수만 호출함 여기서는 resolve("성공")을 호출함
    // 9. then()을 호출함 then() 단위로 파라미터의 함수를 실행하게 됨
    // 10. then((value) => {console.log(value)}, 실행자에서 resolve("성공")에서 "성공"이 value에 설정됨
    // 11. 엔진에서는 상태(fulfilled, rejected)에 따라 파라미터의 핸들러 함수를 실행함
    // 12. then((reason) => { console.log(reason)}; 실행자에서 reject("실패")를 호출하면 then()의 두 번째 파라미터 함수가 실행되며 reject("실패")에서 "실패"가 reason에 설정됨
    
    // [ 실행결과 ]
    // 끝
    // 성공
  • 스펙 : deferred action

    • MDN: Promise chain
    • obj.then((value) ⇒ {console.log(value)}, (reson) ⇒ {console.log(reson)};
  • Promise 오브젝트 형태

    const promise = Promise;
    /*
    	1. Promise 오브젝트 형태를 살펴봄
    
    	2. promise를 펼치면 프로퍼티와 함수가 있음
    
    	3. prototype에 constructor가 있으며 메소드가 있음
    		- JS의 일반적인 형태
    */
    
    cosnt ojb = new Promise((resolve, reject)) => {
    	resolve([1,2,3]);
    	reject("실패");
    	console.log("실행자");
    });
    
    /*
    	1. resolve와 reject 이름의 Function 오브젝트를 생성함
    		- Function 오브젝트이므로 호출할 수 있음
    
    	*** 코드가 끝까지 처리한 후 실행함 ***
    	resolve([1,2,3])을 호출하며 then()이 호출됨
    		- [[PromiseStatus]]: "resolved" 이므로 then()의 첫 번째 파라미터 함수르 실행하게 됨
    */
    
    /*
    	2. obj.__proto__를 펼치면 Promise.prototype에 연결된 메소드가 표시됨
    
    	3. [[PromiseStatus]]: "resolved" Promise 상태를 나타내며 "fulfilled" 상태를 뜻함
    
    	4. [[PromiseValue]]: Array(3) resolve([1,2,3])의 파라미터에 작성한 값
    */
    
    obj.then((value) => {
    	console.log(value);  // resolve([1,2,3])의 [1,2,3]이 value에 설정됨
    }),
    (reason) => {
    	console.log(reason);
    });
    // then()의 파라미터에 성공, 실패 핸들러 함수를 작성함
    
    console.log("끝");