これも忘れそうだからメモっておこう
関数で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