見出し画像

終わったらやる「Promise」

最近なるべくjQueryではなくバニラJSを書くように心がけている私ですこんにちは。
Javascriptって、大体は書いた順に上から処理してくれるイメージですが
実は同時進行タイプ(正しくは非同期言語)なのでちょっと時間のかかる処理を挟むと、他の処理を先に進めてしまう。

でもそれじゃ困るのよ!
絶対にこの処理は全てが片付いてから実行してほしいの!!!!

というときに使える武器の一つ「Promise」オブジェクトについてのメモ。

Promise 雛形

new Promise((resolve) => {

//先に終わらせたい内容

    resolve();  //無事処理が終わったことを伝える

})
.then(() => {

// 全てが片付いてから実行したい内容

});

new Promise の中に、先に処理したい内容を入れます。
最後にresolve()を入れ、処理が終わったことを伝えます。
resolveが返されるとthenの中身が実行されます。

最初、resolveの必要性が全く分からず書かずにいたら
(処理が終わったら書かずとも返されると思ってた)
thenに進まず苦しみました。resolveは入れてあげましょう・・・

ちなみに resolve('処理が終わったよ!') と引数を設定すると
then((val) => { console.log(val) });
これでコンソールに「処理が終わったよ!」とresolveの中身を出すこともできます。

Promiseは成功と失敗で分岐できる

先程「resolve」を使いましたが、これ実は処理が成功したときのお返事。
失敗したときのステップも設定できるのがPromiseオブジェクトの良いところ。

new Promise((resolve, reject) => {
// 処理したい内容

    if( 処理が成功したら ){
        resolve();
    } else {
        reject();
    }
})
.then(() => {
    // 処理成功後に走らせたい内容
})
.catch(() => {
    // 処理失敗後に走らせたい内容
});

※ ifの分岐はサンプルです。
    request.status === 200 なら成功、とかその時々に応じて・・・

流れ

下記の組み合わせで動きます。
処理が成功 ・・・ resolved ➛ then
処理が失敗 ・・・ rejected ➛ catch

他にも色々

async/awaitと組み合わせたり、Promise.allやらPromise.raceやら
便利機能盛りだくさんのPromiseオブジェクト。
コールバックに依存せず、必要に応じて使っていこうと思います。
コツを掴むまでがとても分かりづらかった・・・

この記事が気に入ったらサポートをしてみませんか?