JavaScriptのthenってなに?Promiseの結果を受け取ってみよう

こんにちは、さるまりんです。

前回は、JavaScriptの非同期処理でよく登場する Promise について見てきました。

Promiseは、
あとで結果が返ってくることを表すオブジェクト
でした。

例えば、こんなPromiseがあったとします。

const promise = new Promise((resolve) => {
    setTimeout(() => {
        resolve("できました!");
    }, 1000);
});

1秒後に、

resolve("できました!");

が実行されます。

では、この "できました!" という結果は、どうやって受け取ればいいのでしょうか。

今回は、そのときに使う .then() について見ていきたいと思います。

thenを使ってみよう

先ほどのPromiseの結果を受け取ってみます。

promise.then((result) => {
    console.log(result);
});

実行すると、1秒ほどあとに、

できました!

と表示されます。

.then() には、Promiseの処理が成功したあとに行いたい処理を書くことができます。

今回の場合は、

console.log(result);

ですね。

Promiseから結果が返ってきたら、その結果を画面に表示しています。

resultはどこから来たの?

ここで、

(result) => {
    console.log(result);
}

result はどこから来たのでしょうか。

Promiseの中をもう一度見てみます。

resolve("できました!");

ここで resolve() に渡した、

できました!

という値が、.then() に書いた処理へ渡されます。

つまり、

resolve("できました!");

で渡した値を、

promise.then((result) => {
    console.log(result);
});

result で受け取っているんです。

result という名前に決まりがあるわけではありません。

例えば、

promise.then((message) => {
    console.log(message);
});

としても同じように動きます。

ひとつにつなげて書くこともできます

ここまでは、

const promise = new Promise(...);

として、Promiseをいったん変数に入れていました。

ひとつにつなげて、こんなふうに書くこともできます。

new Promise((resolve) => {
    setTimeout(() => {
        resolve("できました!");
    }, 1000);
}).then((result) => {
    console.log(result);
});

少し長く見えますが、やっていることは同じです。

Promiseの処理が成功して値が返ってきたら、.then() に書いた処理が実行されます。

最初のうちは、Promiseの部分と .then() の部分を分けて考えてみると、分かりやすいかもしれません。

thenは「そのあと」

英語の then には、
「それから」「そのあと」
といった意味があります。

Promiseで何かをして、
そのあと、どうする?
と考えてみると、イメージしやすいかもしれませんね。

promise.then((result) => {
    console.log(result);
});

Promiseの処理が成功したら、
そのあと、この処理をする。
って感じです。

まとめ

今回は、Promiseの .then() について見てきました。

Promiseでは、あとで結果を受け取ることができます。

そして、

resolve("できました!");

のように resolve() に渡した値は、

promise.then((result) => {
    console.log(result);
});

のように .then() の中で受け取ることができます。

Promiseが、
「あとで結果が返ってくることを表すもの」
なら、.then() は、
「そのあとに何をするかを書くところ」
と考えてみると、少し分かりやすいかもしれません。

では、Promiseの処理がうまくいかなかったときはどうなるのでしょう。

次回は、そんなときに登場する catch() について見ていきたいと思います。

読んでくださってありがとうございました。
それではまた!