node.js_promise

BABY CAT·2022년 9월 25일
0

node.js

목록 보기
4/18

https://ko.javascript.info/promise-chaining

async/await

프로미스 체이닝

Promise 는 두가지 콜백함수를 갖는다
1. 성공햇을때 실행되는 리졸브
2. 실패햇을떄 리젝트
미래의 어떤 시점에 결과를 제공하겠다는 '약속'(프로미스)을 반환하는 것

프라미스를 활용한 함수들

```

promise
.then(성공리턴값)
.catch(실패리턴값)
.finally() 끝나면무조건실행

콜백이런 패턴이 복잡해서 프로미스 탄생

콜백함수란


function doHomework(subject, callback) {  
   alert(`Starting my ${subject} homework.`);
   callback();
 }
 
펑션에 매스를 넣은 것이 실행 끝난 후 펑션() 즉 콜백함수가 나중에 실행
즉 비동기(순서대로)로 하게끔 콜백함수를 이용한 것

doHomework('math', function() {
   alert('Finished my homework');
 });
 //‘Starting my math homework'
 //'Finished my homework'
 function doHomework(subject, callback) {
   alert(`Starting my ${subject} homework.`);
   callback();
 }
 function alertFinished(){
   alert('Finished my homework');
 }

두홈워크함수에 매스를 넣은 걸 실행 끝난 후
콜백함수 얼럿피니쉬드를 실행 
즉 위와 같은 결과
 doHomework('math', alertFinished);
 //‘Starting my math homework'
 //'Finished my homework'

1. delayP

//promise

//producer
function delayP(ms){ //리졸브 리젝트 콜백함수두개  리졸브는 성공햇을때실행되는 콜백 리젝은 실패햇을떄
    return new Promise((resolve,reject)=> {
        try {
            setTimeout(()=>{
                resolve("성공");
            },ms);  // ms 시간만큼 타임아웃 걸림, 타임아웃 때 성공을 출력
        } 
        catch(e){
            reject("실패");
        };
    });
};

//소비자 consumer
delayP(1000) //()안 만큼 타임아웃걸림
    .then(console.log) //리졸브에해당  성공을 val로 받아서 출력

/*     .then((val)=>{         //같은코드   
        console.log(val); 
    }); */
    .catch(console.log);
    //.catch(err=>{console.log(err)})  //같은코드  실패를 err로 받아서 출력

2. delayP multi

//딜레이피를 여러번 쓰고 싶을 때
//지정한 시간마다 타임아웃을 연속적으로 건다

function delayP(index,ms){ 
    return new Promise((resolve,reject)=> {
            setTimeout(()=>{
            resolve(index+"성공");
            },ms);
    });
    } 

    //1초마다 한번씩 
    //비동기적을 동기적으로 한 것   동기적:위에서아래로차례로


    // 첫 1,1000이 펑션으로 들어가면 아래 value로 성공이 들어가서 출력되고
    // 두번째 2,1000이 펑션으로 가서 아래 value로 출력이되고 
    // 세번째 3,1000이 펑션으로 들어가서 나온 value가 .then(console.log); 에서 출력된다
delayP(1,1000)
    .then(value=>{
        console.log(value);    //resolve성공을 출력한 후 다시 delayP를 리턴
        return delayP(2,1000);
    })
    .then(value=>{
        console.log(value);
        return delayP(3,1000);
    })
    .then(console.log);

3. readFile multi

const fs = require("fs");
//순서 보장 방법 2가지

// CMD실행  // a b c txt파일을 순서대로 읽는다

fs.readFile("../07.File/tmp/a.txt","utf-8",(err,bufA)=>{
   console.log(bufA)
   fs.readFile("../07.File/tmp/b.txt", "utf-8", (err,bufB)=>{
      console.log(bufB);
      fs.readFile("../07.File/tmp/c.txt", "utf-8", (err,bufC)=>{
         console.log(bufC);
      });
   });
});
//이거대신  아래서 프라미스 덴덴덴으로 순서를 잘 볼 수 잇게 
const fs = require("fs");

function readFilePromise(path){
   return new Promise((resolve,reject)=>{
      fs.readFile(path,"utf-8",(err,data)=>{
         if (err)
            reject(err);
         else
            resolve(data);
      });
   });
};

//cmd실행
readFilePromise("../07.File/tmp/a.txt")
   .then(val=>{
      console.log(val);
      return readFilePromise("../07.File/tmp/b.txt");})
   .then(val=>{
      console.log(val);
      return readFilePromise("../07.File/tmp/c.txt");})
   .then(console.log);

0개의 댓글