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

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

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

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

Q&A

解決済

2回答

142閲覧

Fetch API async functionで生成した戻り値を受け取りたいがエラーになる

tatti2345

総合スコア2

JavaScript

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

0グッド

1クリップ

投稿2024/04/23 07:04

実現したいこと

async functionで生成した戻り値を受け取りたいです。よろしくお願いします。
配列dataの値を受け取ろうと、
let datas =await testData();として戻り値dataを受け取ろうとすると、エラーになってしまいます。

発生している問題・エラーメッセージ

Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules (at test.js:13:12)

該当のソースコード

test.js

1let data = []; 2let nameValue = "" 3async function testData() { 4 const res = await fetch("https://script.google.com/macros/s/AKfycbwHgr1r_IMMX5i-icdtoQxj6uhmzkSey-IjZAOcpRTjFu48L4sDrpydm7DNumZdQqq8/exec"); 5 const data = await res.json(); 6 nameValue = data[0][1]; 7 for (i = 1; i <data.length; i++){ 8 data.push(data[i][i+1]); 9 } 10 return data; 11} 12let datas =await testData(); 13console.log(list); 14console.log(datas);

試したこと

https://www.tohoho-web.com/ex/es2022.html
こちらのサイトなど読みましたが分かりません。

補足情報(FW/ツールのバージョンなど)

vscode

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

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

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

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

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

guest

回答2

0

エラーメッセージの通りで、await を使いたかったら async 関数の中か JavaScript モジュールにする必要があります。
前者の例:

js

1(async function() { 2 let datas = await testData(); 3 console.log(list); 4 console.log(datas); 5})();

投稿2024/04/23 07:12

int32_t

総合スコア20923

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

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

tatti2345

2024/04/24 01:31

回答ありがとうございます。 ベストアンサーは別の方を選ばせていただきましたが、こちらの回答も非常に参考になりました。
guest

0

ベストアンサー

ルートでawaitを利用するにはmoduleを採用する手はあります

javascript

1<script type="module"> 2async function testData() { 3 const res = await fetch("https://script.google.com/macros/s/AKfycbwHgr1r_IMMX5i-icdtoQxj6uhmzkSey-IjZAOcpRTjFu48L4sDrpydm7DNumZdQqq8/exec").then(res=>res.json()); 4 const data=res.reduce((x,y)=>(x.push(Object.values(y)[0]),x),[]); 5 return data; 6} 7const datas = await testData(); 8console.log(datas); 9</script>

そうでないなら真面目にasyncにいれてあげてください

javascript

1<script> 2(async()=>{ 3let data = []; 4let nameValue = "" 5async function testData() { 6 const res = await fetch("https://script.google.com/macros/s/AKfycbwHgr1r_IMMX5i-icdtoQxj6uhmzkSey-IjZAOcpRTjFu48L4sDrpydm7DNumZdQqq8/exec").then(res=>res.json()); 7 const data=res.reduce((x,y)=>(x.push(Object.values(y)[0]),x),[]); 8 return data; 9} 10const datas = await testData(); 11console.log(datas); 12})(); 13</script> 14

ちなみに呼び出すfunctionにasnyc指定をせずにもpromiseをしてもよいです

javascript

1(async()=>{ 2 const testData=()=>new Promise(async resolve=>{ 3 const res = await fetch("https://script.google.com/macros/s/AKfycbwHgr1r_IMMX5i-icdtoQxj6uhmzkSey-IjZAOcpRTjFu48L4sDrpydm7DNumZdQqq8/exec").then(res=>res.json()); 4 const data=res.reduce((x,y)=>(x.push(Object.values(y)[0]),x),[]); 5 resolve(data); 6 }); 7 const datas = await testData(); 8 console.log(datas); 9})();

投稿2024/04/23 07:24

編集2024/04/23 07:34
yambejp

総合スコア114883

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

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

tatti2345

2024/04/24 01:31

回答ありがとうございます。 こちらの回答が非常に参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問