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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

3回答

2678閲覧

【Javascript】処理に順番をつけたいです。

mk_

総合スコア18

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/11/26 05:46

編集2016/11/26 05:52

javascriptでhtmlのフォームをリセットするための処理を実装しようとしています。
フォームのデータの送信が完了したら、フォームにリセットをかけるように動かしたいのですが、これですと、.thenや.catchの処理が終わる前に先に下のif文に行ってしまうようで、うまく判定が行えません。
javascriptは非同期処理ということは調べてわかったのですが、その上で、きちんと処理に順番をつけるにはどうすればいいでしょうか。

(前提:submitボタン、resetボタンは都合上使えないので、送信とリセットはコードで処理を行いたいです。このコードの時点でエラーは起きていません。)

javascript

1var flg = 0; 2 3//中略 4 5answer.save() 6 .then(function() { 7 // 保存完了後に実行される 8 alert("データを送信しました。"); 9 flg = 1; 10 }) 11 .catch(function() { 12 // エラー時に実行される 13 alert("データの送信に失敗しました。"); 14 flg = 1; 15 }); 16 17 if(flg == 1){ 18 Form.reset("form"); 19 }else{ 20 alert("まだリセットできないよ"); 21 }; 22

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

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

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

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

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

guest

回答3

0

処理順ては
1.answer.save()関数が実行
2.thenに通信終了後に実行する関数を登録
3.catchに通信エラー発生時に実行する関数を登録
4.if文実行
(ブラウザーが裏で通信)
6.通信結果によりthen(catch)で登録した関数実行

の順で実行されます。

thenに渡している関数は、通信完了後に実行されますので
if文の段階でflgが1になる事はないです。

通信完了後にリセットしたいのであれば、thenに渡している関数でリセット処理を行えばよいでしょう。

投稿2016/11/26 07:39

編集2016/11/26 07:42
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

なんらかのモジュールを使っていると思いますので、詳細が分からないのですが、これではダメなんでしょうか。

javascript

1answer.save() 2 .then(function() { 3 // 保存完了後に実行される 4 alert("データを送信しました。"); 5 Form.reset("form");; 6 }) 7 .catch(function() { 8 // エラー時に実行される 9 alert("データの送信に失敗しました。"); 10 Form.reset("form");; 11 });

投稿2016/11/26 07:24

Lhankor_Mhy

総合スコア36074

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

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

mk_

2016/11/26 12:48

回答ありがとうございます。あるモジュールを使っているのですが、この.thenの中にリセット処理を書くとエラーがおきてしまうのです・・・ なので.then .catchの外に処理をかけるといいのですが、不可能でしょうか・・・
guest

0

こんな風に書けそう(未検証)。

JavaScript

1var flg = 0; 2//中略 3answer.save() 4 .then( function() { 5 // 保存完了後に実行される 6 alert("データを送信しました。"); 7 flg = 1; 8 } ) 9 .catch( function() { 10 // エラー時に実行される 11 alert("データの送信に失敗しました。"); 12 flg = 1; 13 } ) 14 .then( function() { 15 if(flg == 1){ 16 Form.reset("form"); 17 }else{ 18 alert("まだリセットできないよ"); 19 }; 20 } );

【今更ながらNode.jsでPromiseの使用例 - エンタープライズIT系エンジニアのぼやっきー】
http://junmt.hatenablog.com/entry/2015/12/11/171045

投稿2016/11/26 16:09

kei344

総合スコア69400

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問