fetchの2回await、初見だと「は?」ってなるけどストリームとか考えると妥当なんだよな。kyのチェーンできる感じは好き
awaitを2回するということではなくて、ヘッダとレスポンスそれぞれを独立したメソッドで取得することになっていて、それらのメソッドが非同期であるというだけでは?
fetch(url).then(res=>res.json()) をするとレスポンスヘッダーが取れなくなるからメソッド一発でレスポンスヘッダ・ボディを取得するメソッドも欲しい
同じような感じで、なんでネットワークアドレスはIPアドレスとMACアドレスの二階建てじゃないといけないのかの解説も待ってます!!
“fetch が「2回 await」方式を採用したのに対して、axios は「基本は1回 await だけど、レスポンスボディをストリームとして扱いたい場合はオプションを指定する」という形になっていることが分かります。”
Fetch APIの概念は https://extensiblewebmanifesto.org/ja/ の影響を受けてるので、Fetch自体がプリミティブなAPIという位置付け(XHRがHigh Levelに対する、Low Level)という前提がないと、比較対象が違うものになってしまう感じがする。
fetchやaxiosを無意識に使ってたけど、2回awaitする理由は、ヘッダーとボディの取得は別になってるHTTPの仕様が関係してくるのですね。なにげない仕様に対し、どうしてと疑問に持って調べる姿勢はステキだね。
ん?二回目のawaitはレスポンスボディをとると言うよりレスポンスボディのjson解析じゃないの?単にレスポンスボディ本体をとりたいだけなら一回で済まなくない?
勉強になった。 / こういう比較のときにjQueryが出てこなくなるのが寂しさ感じる
"fetch() が返す Promise は、レスポンスヘッダが届いた時点で解決されます。この時点ではまだボディは読み取れていません"
この記事は、fetchがヘッダ到着でPromiseを解決しボディ取得にもう一度awaitやresp.json()が必要な理由を、ストリーミングやundici/Denoのリソース管理視点で解説します。
おお、ちゃんとresponse bodyをちゃんとconsumeしないとリソースリークになるよと。これは知らなかった。
通信はCPUとメモリに比べてとてもとても遅いので、レスポンス全部終わるまで待たずにヘッダまで受け取ったところで一回処理を戻せるのは合理的だよね。async-awaitっていう簡単に書ける文法があるから取れる手段。
んー、axiosでよろしおす。
なぜJavaScriptのfetchはawaitを2回しないとレスポンスを取れないのか | maguro.dev
fetchの2回await、初見だと「は?」ってなるけどストリームとか考えると妥当なんだよな。kyのチェーンできる感じは好き
awaitを2回するということではなくて、ヘッダとレスポンスそれぞれを独立したメソッドで取得することになっていて、それらのメソッドが非同期であるというだけでは?
fetch(url).then(res=>res.json()) をするとレスポンスヘッダーが取れなくなるからメソッド一発でレスポンスヘッダ・ボディを取得するメソッドも欲しい
同じような感じで、なんでネットワークアドレスはIPアドレスとMACアドレスの二階建てじゃないといけないのかの解説も待ってます!!
“fetch が「2回 await」方式を採用したのに対して、axios は「基本は1回 await だけど、レスポンスボディをストリームとして扱いたい場合はオプションを指定する」という形になっていることが分かります。”
Fetch APIの概念は https://extensiblewebmanifesto.org/ja/ の影響を受けてるので、Fetch自体がプリミティブなAPIという位置付け(XHRがHigh Levelに対する、Low Level)という前提がないと、比較対象が違うものになってしまう感じがする。
fetchやaxiosを無意識に使ってたけど、2回awaitする理由は、ヘッダーとボディの取得は別になってるHTTPの仕様が関係してくるのですね。なにげない仕様に対し、どうしてと疑問に持って調べる姿勢はステキだね。
ん?二回目のawaitはレスポンスボディをとると言うよりレスポンスボディのjson解析じゃないの?単にレスポンスボディ本体をとりたいだけなら一回で済まなくない?
勉強になった。 / こういう比較のときにjQueryが出てこなくなるのが寂しさ感じる
"fetch() が返す Promise は、レスポンスヘッダが届いた時点で解決されます。この時点ではまだボディは読み取れていません"
この記事は、fetchがヘッダ到着でPromiseを解決しボディ取得にもう一度awaitやresp.json()が必要な理由を、ストリーミングやundici/Denoのリソース管理視点で解説します。
おお、ちゃんとresponse bodyをちゃんとconsumeしないとリソースリークになるよと。これは知らなかった。
通信はCPUとメモリに比べてとてもとても遅いので、レスポンス全部終わるまで待たずにヘッダまで受け取ったところで一回処理を戻せるのは合理的だよね。async-awaitっていう簡単に書ける文法があるから取れる手段。
んー、axiosでよろしおす。