🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

解決済

1回答

340閲覧

jQueryの when() で、1つ完了するごとに結果を受け取る方法

konsai

総合スコア8

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2020/01/02 12:01

編集2020/01/02 12:23

###実現したいこと

お世話になっております。

when() で同時に処理しつつ、その結果を1つずつ受け取りたいのですが、方法はございますでしょうか。

###該当のソースコード

現状では下記のようにA、Bを取得します。これはA、Bいずれの取得も完了してから、やっと .done に行ける。というものだと思います。

js

1$.when( 2 getA( argsA ), 3 getB( argsB ) 4) 5.done(function( A, B ) { 6 console.log( A ); 7 console.log( B ); 8});

今回は上の処理について、
Aが取得できた時点で console.log( A )して、
Bが取得できた時点で console.log( B )する。
というような処理を考えているのですが、そのようなことをする方法がございましたらご教授願えませんでしょうか。

###目的
getA()、getB() はいずれも検索になりまして、一方の取得が遅くなるケースが想定されます。

ゆえに、いずれも取得が完了してから結果を同時に表示するのではなくて、片方だけでも取得できた時点で順次表示していく方がユーザビリティが高いと考えました。

以上のように、目的は「検索結果の順次表示」になります。

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

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

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

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

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

m.ts10806

2020/01/02 12:03

目的を書かれた方が良いと思います。
konsai

2020/01/02 12:23

なるほど、ありがとうございます。掲載させて頂きました。
m.ts10806

2020/01/02 12:26

ケースだと思うのですが、 Aが成功してBが失敗した場合(通信とか様々な事情で)はどうするのでしょうか。
konsai

2020/01/02 13:33

Bが失敗すれば以下のように素直にそう表示しようと考えていますが、どのような懸念を意図したご質問でしょうか?すみません、jQuery初心者につきご質問の意図が掴めずにおります。 <div class="resultA"> <a>titleA1</a><a>titleA2</a> </div> <div class="resultB"> <p>Bの取得に失敗しました</p> </div>
guest

回答1

0

ベストアンサー

こういう書き方が出来たような。(未検証)

js

1$.when( 2 getA( argsA ).done( function( A ) { console.log( 1, A ); }), 3 getB( argsB ).done( function( B ) { console.log( 1, B ); }) 4).done( function( A, B ) { 5 console.log( 2, A ); 6 console.log( 2, B ); 7} );

投稿2020/01/02 12:17

kei344

総合スコア69596

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

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

konsai

2020/01/02 13:31

ありがとうございます。 こちらの kei344San_1() で検証させて頂きました。 https://jsfiddle.net/qw97u1k3/ すると以下2つのコンソールが同時に表示されつつ、 console.log('getA()を実行'); console.log('getB()を実行'); しかし以下2つは500ズレて表示されました。 console.log( 1, A ); console.log( 1, B ); なので出来ているようです。感謝申し上げます。
konsai

2020/01/02 13:33

ただわからないのが2つございます。先のjsfiddleでコメントアウトしてある通りですが、 1.kei344San_1() でなぜ2回目のコンソールが必要なのか? 2.myFunc_2() でなぜundefinedになってしまうのか? について、誠に恐縮ですが、続いてご指導いただけませんでしょうか。
kei344

2020/01/02 13:40

2回目のコンソールとは?console.log( 2, A );のことを言っているのであれば、どういう順に処理が行われるかを確認するためです。もし、.done( function( A, B ) {以降の部分全体なら、そもそもwhenを使う必要がありません。 > myFunc_2 何を期待しているコード化が私には読み取れませんでした。別途質問をされてはいかがでしょう。
konsai

2020/01/02 13:45

失礼致しました。混乱気味で妙な質問をしてしまいました…。 このたびは良い方法をどうもありがとうございました。教えて頂いたコードを使わせて頂きたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問