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

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

詳細はこちら
JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

1837閲覧

JSのfetechでres.json()の戻り値を配列に入れると結果が変わる

yuzunoha123

総合スコア28

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/03/07 14:31

下記の3つの自作関数それぞれの出力結果について、
test1ではpromiseの結果が出力されるのですが、
test2とtest3ではPromiseオブジェクトが出てしまうのが謎です。

返却値の出どころはすべて
const json = res.json();
なのですが。

なぜなのかご教示いただけますと幸いです。

JavaScript

1'use strict'; 2 3const url = 'https://www.jma.go.jp/bosai/forecast/data/overview_week/130000.json'; 4 5const test1 = () => { 6 fetch(url) 7 .then((res) => { 8 const json = res.json(); 9 return json; 10 }) 11 .then((json) => { 12 console.log(json); // {publishingOffice: "気象庁", ... 13 }); 14}; 15 16const test2 = () => { 17 fetch(url) 18 .then((res) => { 19 const json = res.json(); 20 return { json }; 21 }) 22 .then(({ json }) => { 23 console.log(json); // Promise {<pending>} 24 }); 25}; 26 27const test3 = () => { 28 fetch(url) 29 .then((res) => { 30 const json = res.json(); 31 return [json]; 32 }) 33 .then((arr) => { 34 const json = arr[0]; 35 console.log(json); // Promise {<pending>} 36 }); 37}; 38 39test1(); 40test2(); 41test3();

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

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

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

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

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

guest

回答1

0

ベストアンサー

json()自体がpromiseを返すのでthenで受ければ値をとれますが
[json()]はpromiseが入った配列を返すので、thenで受けても値は取り出せません

javascript

1const url = 'https://www.jma.go.jp/bosai/forecast/data/overview_week/130000.json'; 2const test2 = () => { 3 fetch(url).then(res=>new Promise(async resolve=>resolve({json:await res.json()}))).then(data=>console.log(data.json)); 4}; 5test2(); 6const test3 = () => { 7 fetch(url).then(res=>new Promise(async resolve=>resolve([await res.json()]))).then(data=>console.log(data[0])); 8}; 9test3();

もしくは

javascript

1const url = 'https://www.jma.go.jp/bosai/forecast/data/overview_week/130000.json'; 2const test2 = () => { 3 fetch(url).then(async res=>({json:await res.json().then(data=>data)})).then(data=>console.log(data.json)); 4}; 5test2(); 6const test3 = () => { 7 fetch(url).then(async res=>[await res.json().then(data=>data)]).then(data=>console.log(data[0])); 8}; 9test3();

投稿2021/03/07 15:04

編集2021/03/07 15:17
yambejp

総合スコア116688

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

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

yuzunoha123

2021/03/08 04:28

回答ありがとうございます!json()はPromiseを返していたのですね!! 僕が見たことないasync-awaitのサンプルコードも載せていただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問