콜백헬

비동기 함수의 처리 결과에 대한 처리는 비동기 함수의 콜백 함수 내에서 처리해야 한다.

콜백함수의 순서가 보장되지 않기 때문에 콜백함수가 실행되기 전 먼저 후속처리 코드가 실행될 수 있어 원하는 동작을 하지 않을 수 있다.

function q () {
    return setTimeout(()=> c=3,3000);
}

console.log(c) // 4
q()
console.log(c) // 4

프로미스

!! 프로미스를 생성하면 프로미스에 전달된 함수는 호출하지 않아도 바로 실행이 되니 유의하여 만들어야 한다. 그렇지 않다면 불필요한 네트워크 통신이 진행될 수 있다.

비동기함수 처리 → resolve or reject 함수의 인자로 후속처리에 전달할 코드를 작성한다 →

then or catch 후속처리 메소드 실행

const promise = new Promise ((resolve,reject)=>{
  if(setTimeout(()=>{console.log(1)},3000)){
    resolve('result'); // 성공 시 then메소드의 인자로 'result'를 전달 받는다
  } else reject ('error'); // 실패 시 catch 메소드의 인자로 'error'를 전달 받는다
})
.then(console.log) // result 
. catch (console.log) // error
// 바로 함수를 사용할 땐 인자를 직접 쓰지 않아도 알아서 들어가 생략 가능

then 의 인자로 resolve의 파라미터를 전달하는데 파라미터에 값을 전달할 수도 있고 프로미스를 전달할 수도 있다.