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

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

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

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

Q&A

3回答

2186閲覧

promiseの2つのコードの違いについて

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2016/07/25 14:22

fetch("https://jsonplaceholder.typicode.com/users").then(response=>{ var a=response.json(); console.log(a) }).then(json=>{ console.log(json) }).catch(err=>{ console.log(err) })

上のコードを試したのですがpending状態から動きません。しかしいろいろいじって下のコードにしたら成功しました。

fetch("https://jsonplaceholder.typicode.com/users").then(response=>{ var a=response.json().then(json=>{ console.log(json) }) //console.log(a) })

両者の違いは何でしょうか?thenするごとに新しくpromiseが作られるんですよね?promiseチェーンがfetchのプロミスチェーンとjson()のプロミスチェーンで2つある感じでしょうか?

response.json返り血にpromiseが返ってくるとあったので var a=response.json();a.resolve()としてみたのですがエラーが出ました。

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

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

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

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

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

guest

回答3

0

pending状態から動きません

いいえ、解決していますが、気づいていないだけです。
ただ最初のthenで何も返していない、undefinedを返しているため、
2つめのthenでのjson引数にはundefinedが入ってしまっています。

thenのコールバックでプロミスを返すと、その解決値が次のthenのコールバックで受け取ることができます。
よって期待通りの挙動にするためには最初のthenのコールバックでreturn aしないといけません

投稿2016/07/27 09:00

jser

総合スコア100

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

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

0

thenするごとに新しくpromiseが作られるんですよね?

それは違うような。
.then() するだけなら元のままの Promise を返すと思います。

JavaScript

1'use strict'; 2var promise; 3 4fetch("https://jsonplaceholder.typicode.com/users").then(response=>{ 5 var a=response.json(); 6 console.log(a); 7 8 promise = this; 9}).then(json=>{ 10 console.log(this === promise); // true 11 console.log(json); 12}).catch(err=>{ 13 console.log(err) 14});

.then().then() とした場合、1回目の .then() で既に結果を得ている為、2回目の .then() は期待通りに機能しません。

Re: pasuwardo さん

投稿2016/07/26 04:57

編集2016/07/26 05:05
think49

総合スコア18156

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

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

0

js

1fetch("https://jsonplaceholder.typicode.com/users") 2 .then(response => { 3 var a=response.json(); 4 console.log(a) 5 return a 6 }) 7 .then(json => { 8 console.log(json) 9 }) 10 .catch(err => { 11 console.log(err) 12 });

ですかね。

次の .then()json を渡すために return が必要です。

投稿2016/07/25 18:29

iktakahiro

総合スコア142

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

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

退会済みユーザー

退会済みユーザー

2016/07/26 03:06

responseはpromiseをprototypeとしたResponse型なので返り値としてpromise.resolveできると思うのですがどうでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問