> For the complete documentation index, see [llms.txt](https://jangar6621.gitbook.io/javascript-jquery/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jangar6621.gitbook.io/javascript-jquery/undefined-2/promise.md).

# Promise

## 1. 동기화&#x20;

```javascript
function a(){
    console.log('A')
}
function b(){
    console.log('B')
}
a();
b();
// A B
```

## 2. 동기화&#x20;

```javascript
function a(){
    setTimeout(function(){
        console.log('A')
    }, 1000)
}
function b(){
    console.log('B')
}
a();
b();
// B A
```

## 3. 콜백 지옥

```javascript
function a(callback){
    setTimeout(function(){
        console.log('A')
        callback();
    }, 1000);
}
function b(){
    setTimeout(function(){
        console.log('B')
        callback();
    }, 1000);
}
function c(){
    setTimeout(function(){
        console.log('C')
        callback();
    }, 1000);
}
function d(){
    setTimeout(function(){
        console.log('D')
    }, 1000);
}
a(function(){
    b(function(){
        c(function(){
            d();
        });
    }); 
});
```

![](https://99544485-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEzQQnFOvAnjgFd5TLw%2F-MP2B-aqsvTjg8rysMGx%2F-MP2BmJQCTPsW1A-B0gt%2Fimage.png?alt=media\&token=dc4d80d1-52b4-4852-9689-9a4208c435db)

## 4. promise&#x20;

```javascript
function a(){
    return new Promise((resolve, reject)=>{
        setTimeout(()=>{
            console.log('A');
            resolve();
        }, 1000);
    });
}
function b(){
    return new Promise((resolve, reject)=>{
        setTimeout(()=>{
            console.log('B');
            resolve();
        }, 1000);
    });
}
function c(){
    return new Promise((resolve, reject)=>{
        setTimeout(()=>{
            console.log('C');
            resolve();
        }, 1000);
    });
}
function d(){
    return new Promise((resolve, reject)=>{
        setTimeout(()=>{
            console.log('D');
            resolve();
        }, 1000);
    });
}
a()
.then(() => b())
.then(() => c())
.then(() => d())
```

```javascript
function a(){
    return new Promise((resolve, reject)=>{
        if(isError){
            reject()
        }
        setTimeout(()=>{
            console.log('A');
            resolve();
        }, 1000);
    });
}
a().then()
    .catch((error) => {
        console.log(error);
    })
    
// 데이터를 불러오면 reject, 실패하면 콘솔로그로 확인 
```
