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

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

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

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

Q&A

解決済

2回答

8448閲覧

【JavaScript】fetchで取得したデータを変数にセットして自由に使いたい

true_colors_20

総合スコア25

JavaScript

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

0グッド

0クリップ

投稿2020/08/20 02:24

前提・実現したいこと

以下コードでは、
api()関数でfetchを使いhttpリクエストを投げ、取得した情報がdata変数に格納されています。
このdatafunc()関数で使いたいのですが、そこがうまくいきません。(dataを呼んでも値がundefinedになります)

.then(data => {・・・・・})の中で他の関数を使えばもちろんdataは使えるのですが、
以下コードのような形でdataを呼び出せる方法はありますか?

該当のソースコード

function api(_id) { const id = _id const request = `https://app.com?id=${id}` fetch(request, { method: "GET", }) .then(response => response.text()) .then(data => { console.log(data); // この`data`を関数の外(他の関数など)で使いたい return data; // returnで返してもundefinedになる }); } function func() { const getData = api('id111') console.log(getData) // undefinedになる } func()

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

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

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

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

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

guest

回答2

0

ベストアンサー

以下コードのような形でdataを呼び出せる方法はありますか?

直接的にはありません。データは非同期でしか取れないのに対して、関数は同期的に戻ってしまいます。

なお、async-awaitを使えば、見た目だけは「引数をそのまま使う」ように書けます(実際にはすべてが非同期に動作します)。

投稿2020/08/20 02:28

maisumakun

総合スコア146063

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

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

true_colors_20

2020/08/21 01:37

async-awaitを初めて知りました。 ここらへんをもう少し調べてみます。ありがとうございます。
guest

0

処理的にはこんな感じです

投稿2020/08/20 03:00

yambejp

総合スコア116835

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

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

yambejp

2020/08/20 03:17 編集

const api=async(_id)=>{ const id=_id; const url="http://exsample.com?id="+encodeURIComponent(_id); return await fetch(url).then(response => response.text()) } const func=async()=>{ const getData = await api('id111'); console.log(getData); } func(); ただしCORSが絡むので、urlは同じドメイン内のファイルを直接指定する前提にした方がよいでしょう
true_colors_20

2020/08/21 01:36

コードのご教授ありがとうございます。最終的に外部APIを叩くのでCORSになると厳しいですね、、、
yambejp

2020/08/21 01:47

> 最終的に外部APIを叩く 外部APIの仕様次第ですね。 外部から参照されることを前提としていないなら難しそうですが ご自身で簡易的なhttpdを立てて、クローリングするという手もあります。 API側がJSONPかなにかで対応してくれるのがベターですけどね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問