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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

701閲覧

react データ取得時 then catchの挙動

cuku

総合スコア108

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/02/17 05:52

編集2020/02/17 09:18

下記の処理が行われた時に正常に処理が行われればthen()の中の処理が呼ばれると思うのですが.catch(this.handleError)が呼ばれています。
console.logを下記の場所に埋め込んで調べたところthen()の中の処理は呼ばれていました。またctachの処理も呼ばれていたのです。then()とcatchが両方呼ばれることなどあるのでしょうか?
また .catch((e) => console.log('エラー'))が呼ばれたところなのですがデベロッパーツールでは
onDeleteGroup(group, type) {
//この行でcatchのエラーが呼ばれていた。
window.fetchJson(/group/, {
となっていて
thenより前の行で呼ばれていることになっていましたどうしてなのでしょうか?

//追記
.catch((e) => console.log(e))としてみたところTypeError: Invalid attempt to spread non-iterable instanceというエラーでしたどうやって解決できるのでしょうか?

onDeleteGroup(group, type) { window.fetchJson(`/group/`, { method: DELETE, body: JSON.stringify(humps.decamelizeKeys( { Id: [this.state.id], groupId: group.id } )), }).then(() => this.deleteGroup(group, type)) //.catch(this.handleError); .catch((e) => console.log('エラー')) }
deleteGroup(group, type) { console.log(group); const temp = Object.assign({}, { [type]: user[type].filter((g) => g.id !== group.id) } ); this.setState({ user = temp [type]: [...this.state[type], group], isSnackBarActive: true, snackBarMessage: '削除しました。', }); }

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

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

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

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

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

guest

回答1

0

ベストアンサー

thenの中でExceptionが発生した場合もcatchの中に入ります。
そのため、この場合では

window.fetchJsonに成功し、thenの中に入る
->deleteGroupExceptionが発生し、catchの中に入る

という処理の流れになっています。

TypeError: Invalid attempt to spread non-iterable instanceについては展開できないインスタンスを展開しようとしてるときに起こるエラーです。

おそらく...this.state[type]にてthis.state[type]の展開に失敗しているかと思うので、この変数の中身を確認してみると良いかもしれません。

投稿2020/02/17 06:30

dorarep

総合スコア102

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

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

cuku

2020/02/17 06:34

返信ありがとうございます!setStateしている変数ってどうやって見ればいいのでしょうか?
dorarep

2020/02/17 06:37

`console.log(group);`を`console.log(this.state[type]);`に書き換えて、コンソールで確認してみたらどうでしょう??
cuku

2020/02/17 08:13

undifindとなっていました
dorarep

2020/02/17 08:22

...this.state[type]の...を消せばとりあえずエラーはなくなるかと思いますー
cuku

2020/02/17 08:29

stateがnullなんてあるのでしょうか?
dorarep

2020/02/17 08:49 編集

state[type]なので、stateの中のtypeで指定された中身が定義されてない場合undefinedになります。 たとえばstate = { name: 'Taro', age: 30 }で、type='name'だとstate[type]で'Taro'が取得できます。 しかしtype='hoge'だとstateの中にhogeはないので、state[type]はundefinedとなります。
cuku

2020/02/17 09:19

一部載せていないコードがあったので記述しました。 Object.assign({}, { [type]: user[type].filter((g) => g.id !== group.id) }では指定したことにはなっていないのでしょうか?
cuku

2020/02/17 09:27

長くなりそうなのでわからないところを別で質問します。 ありがとうございました!!!
dorarep

2020/02/17 09:29

はい!また何かあればぜひー
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問