> For the complete documentation index, see [llms.txt](https://min0228k.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://min0228k.gitbook.io/javascript-jquery/undefined-5/promise.md).

# promise

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

//A
//B
```

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

//B
//A
```

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

//A
//B
//C
//D
```

```javascript
//promise
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(()=>{
//     return b()
// }).then(()=>{
//     return c()
// }).then(()=>{
//     return d()
// })
a()
.then(()=> b())
.then(()=> c())
.then(()=> d())
```

```javascript
//promise 기본문법
function a(){
    return new Promise((resolve, reject) => {
        if(isError){
            reject()
        }
        setTimeout(()=>{
            console.log("A");
            resolve();
        },1000);
    });
}
a().then()
    .catch((error) => {
        console.log(error)
    })
```
