LoginSignup
0
1

More than 3 years have passed since last update.

JavaScript Promise を return するときに値も return したい

Last updated at Posted at 2021-01-26

これも忘れそうだからメモっておこう

関数でpromiseをreturnすると、受け取った側でthenできるけど、そしたらどうやってpromiseじゃない値をreturnするの?という疑問

答えは resolve(ここに渡したい値をobjectにまとめて書く);

(a) awaitで受け取る

awaitをチェーンするのはおすすめしないので、エラー処理にはtry..catchが必要。

<script>

const worker = async () => {
        // Promiseをreturnします。そのPromiseの中に resolve()した内容が入ってる=結果として `返り値を持ったPromise` がreturnされます
    return await new Promise((resolve) => {        // Promiseをreturn
        setTimeout(()=>{
            resolve({
                status: `success`,  //<------Promiseに持たせる戻り値をresolve()で指定する
                other1: `...`,
                other2: `...`
            });
        }, 1000)
    });
}

// awaitを中で使うので、この start() は async で宣言する
const start = async () => {
    try {
        const p = await worker();           //<------この p で受け取ってるよ
        console.log(`status=${p.status}`);   //<------受け取ったpを使える
    } catch(e) {
        console.log(e);
    }
}

start();

</script>

result

{status: "success"}

(b) thenで受け取る

<script>

const worker = async () => {
    return await new Promise((resolve) => {  // Promiseをreturnします。
        setTimeout(()=>{
            resolve({
                status: `success`, //<------関数が任意の戻り値を返すresolve() returnだと思ってください
                other1: `...`,
                other2: `...`
            });
        }, 1000)
    });
}

// awaitを中で使うので、この start() は async で宣言する
const start = async () => {
    worker().then((p) => {                      //<------この p で受け取ってるよ
        console.log(`status=${p.status}`);         //<------受け取ったpを使える
    }).catch((e) => {
        console.log(e);
    });
}

start();

</script>

result

{status: "success"}

JavaScript Promiseの実行タイミング Promise.start() とか Promise.execute() 的なもの
https://qiita.com/uturned0/items/6f19b32ec1154e63b453
JavaScript Promise, await, Promise.all() 周りのメモ。一部処理だけ待ちたい/同期させたい場合 etc
https://qiita.com/uturned0/items/74ff00cbef3290d0aed2
PromiseとAwaitの違い、Promiseで勘違いしたこと
https://qiita.com/uturned0/items/d68ba5d771e536489c40

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