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

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

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

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

Q&A

解決済

3回答

1352閲覧

ネストされたfor文の結果による早期リターンの仕方がわからない

span

総合スコア32

JavaScript

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

0グッド

1クリップ

投稿2020/03/01 18:06

javascript

1function test() { 2 hoge().then((response) => { 3 // response = ['あああ', 'いいい', 'ううう', 'えええ', 'おおお'] 4 for (let i in response) { 5 if (response[i] === 'ううう') { 6 return 7 } 8 } 9 }) 10 console.log('これを表示させたくない') 11}

上記のようなコードがあるとしてresponseに'ううう'が含まれる場合はその場で早期リターンし処理を止めたいです
上記のようなコードだとconsole.logが表示されると思うのですがfor文の中の結果によりその場で処理を終了させるにはどうすれば良いのでしょうか?
大変申し訳ありませんがご教示いただければ幸いです。

javascript

1function test() { 2 let test = true 3 hoge().then((response) => { 4 // response = ['あああ', 'いいい', 'ううう', 'えええ', 'おおお'] 5 for (let i in response) { 6 if (response[i] === 'ううう') { 7 test = false 8 return 9 } 10 } 11 }) 12 if (test) { 13 console.log('これを表示させたくない') 14 } 15}

できれば上記のような形ではなく早期リターンで処理を止めることはできないかと思っております

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

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

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

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

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

guest

回答3

0

こんにちは

hoge() がPromiseを返すのであれば、以下のようにすればよいかと思います。

javascript

1async function test() { 2 const response = await hoge() 3 4 for (let i in response) { 5 if (response[i] === 'ううう') { 6 return 7 } 8 } 9 10 console.log('これを表示させたくない') 11}

投稿2020/03/01 19:09

編集2020/03/08 00:13
jun68ykt

総合スコア9058

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

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

span

2020/03/06 17:33

お返事遅れてしまい申し訳ありません 大変参考になりました!ありがとうございます!
jun68ykt

2020/03/08 00:44

どういたしまして。 回答に添付したCodePen のサンプルを以下のように修正しました。 ・「関数testを実行」ボタンをクリックすると、test()が呼ばれる。 ・test() の一行目では、hogeの返すPromiseがresolve されてresponseに結果が入ってくるまで待つ。 ・hoge() は、2秒の遅延のあとDATAという配列でresolveされるPromiseを返す。
guest

0

こうするとよいでしょう

投稿2020/03/02 00:47

yambejp

総合スコア114572

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

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

yambejp

2020/03/02 03:43 編集

<script> const hoge=async ()=>new Promise(resolve=>resolve(['あああ', 'いいい', 'ううう', 'えええ', 'おおお'])); const test=async ()=>{ if(await hoge().then(response => { for (let i=0;i<response.length;i++) { console.log(i); if (response[i] === 'ううう') { return true; } } return false; })) return; console.log('これを表示させたくない'); }; test(); </script>
span

2020/03/06 17:34

お返事遅れてしまい申し訳ありません 参考にさせていただきます!ありがとうございました!
guest

0

ベストアンサー

関数の外側の関数をreturnすることはできません。

投稿2020/03/01 18:10

kei344

総合スコア69364

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

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

span

2020/03/01 18:13

納得することができましたありがとうございます!後述していたようなフラグを持たせるような処理にしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問