質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2010閲覧

javascript promiseを使った文の意味がわからない

violineer

総合スコア72

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/03/30 09:29

以下のコードですが、
1点目
const [] =
の[]の表記はどのようなものでしょうか??

2点目
const[] =promise.all(
)
とありますが
const a = new promise()
なら新しいpromiseオブジェクトを代入しているのがわかります。
また、promiseがすでにユーバーガ定義したオブジェクトならば、
promiseに対してall()というメソッドを使用したのか?と考えることもできます
そして使用した結果を代入したと解釈できます

ただpromise自体はユーザーが定義した変数ではないので、この書き方に戸惑っています。
どのような気泡でしょうか??

js

1const [course, { userCourse }] = await Promise.all([ 2 api.showCourse(courseId).catch(err => { 3 this.setState({ isValidUrl: false }); 4 return null; 5 }), 6 api.showUserCourse(uid, courseId).catch(err => { 7 if ( 8 (err.code === "User course not found" && err.status === 404) || 9 !isLoggedIn || 10 true 11 ) { 12 return { userCourse: {} }; 13 } 14 }) 15 ]);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/30 09:53

以前の丸投げ質問が未解決かつ未修正のままです。こちらの質問もpromiseのことを調べて具体的にどこまで理解しどこから分からないのかを質問文に書いて下さい。
violineer

2018/03/30 12:27

すみません、不快な思いをさせているようなので消去依頼を出しました。
guest

回答2

0

const [] =

の[]の表記はどのようなものでしょうか??

destructuring assignment(分割代入??)というものです。

分割代入 - MDN

また、promiseがすでにユーバーガ定義したオブジェクトならば、

promiseに対してall()というメソッドを使用したのか?と考えることもできます
そして使用した結果を代入したと解釈できます

難しいことを考えなくても、Promise.all()Promiseの配列(厳密にはiterable)を受け取ってすべてのPromiseがresolveするまで待つPromiseを返すという関数です。

Promise.all() - MDN
Promise.all() - 複数のPromise関数を実行し、全ての結果を得る | JavaScriptリファレンス

awaitを使っているということはasync function内のコードなので以下のようになっていると思いますが、

js

1async function f() { 2 const [course, {userCourse}] = await Promise.all([promise1, promise2]); 3 // do something 4}

これは下のコードとだいたい同じです。

js

1function f() { 2 Promise.all([promise1, promise2]) 3 .then(result => { 4 const course = result[0] 5 const userCourse = result[1].userCourse 6 // do something 7 }) 8}

async/awaitについてご存じないならこちらが参考になるでしょう。
async function - JavaScript - MDN
async/await 入門(JavaScript) - qiita

投稿2018/03/30 10:03

編集2018/03/30 10:06
karamarimo

総合スコア2551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

await Promise.allが配列を返しているので, これを変数cource, userCourceに分割代入しています.

一度にまとめるから判りにくいのですが, 要は

JavaScript

1const [course, { userCourse }] = await Promise.all([ 2 api.showCourse(courseId).catch(err => { 3 this.setState({ isValidUrl: false }); 4 return null; 5 }), 6 api.showUserCourse(uid, courseId).catch(err => { 7 if ( 8 (err.code === "User course not found" && err.status === 404) || 9 !isLoggedIn || 10 true 11 ) { 12 return { userCourse: {} }; 13 } 14 }) 15 ]);

asynd Promise.all部(Promiseの配列を配列を返すPromiseに変換する)

JavaScript

1const result = await Promise.all([ 2 api.showCourse(courseId).catch(err => { 3 this.setState({ isValidUrl: false }); 4 return null; 5 }), 6 api.showUserCourse(uid, courseId).catch(err => { 7 if ( 8 (err.code === "User course not found" && err.status === 404) || 9 !isLoggedIn || 10 true 11 ) { 12 return { userCourse: {} }; 13 } 14 }) 15 ]);

と分割代入部の

JavaScript

1const [course, { userCourse }] = result;

に分解でき, 後者は更に

JavaScript

1const cource = result[0]; 2const userCource = result[1].userCource;

と書き換えられます.

投稿2018/03/30 09:51

defghi1977

総合スコア4756

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問