LoginSignup
0
1

Promiseとasync,await

Posted at

Promise

setTimeout(() => {
    console.log(1)
    setTimeout(() => {
        console.log(2)
        setTimeout(() => {
            console.log(3)
        }, 1000)
    }, 1000)
}, 1000)

setTimeoutのような非同期処理を同期的に処理させようとするとコールバック地獄となる。ネストが多重となり可読性が落ちる。

そこでPromise!!

const promise = () => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve()
        }, 1000)
    }
    )
}
promise().then(() => {
    console.log(1)
    return promise()
}).then(() => {
    console.log(2)
    return promise()
}).then(() => {
    console.log(3)
})

Promiseオブジェクトに非同期処理をまとめる。もしその非同期処理が正常に終了したならreslove関数をコールバックし、エラーが起こるとreject関数をコールバックする。

resolve,rejectは成功失敗を通知する関数。

成功した場合はthenで失敗した場合はcatchで後続処理を書く。

async,await

もっと簡単にかけるのがasync,await

const promise = () => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve()
        }, 1000)
    }
    )
}
async function asyncFunc() {
    await promise()
    console.log(1)
    await promise()
    console.log(2)
    await promise()
    console.log(3)
}
asyncFunc()

大分スマートに書けるようになった。

asyncを関数につけると、その関数はreturnでPromiseのresolve()を返し、throwでPromiseのreject()を返す。

awaitをつけた関数は、Promiseが返ってくるまで処理を待つ。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1