0_terarin_0
@0_terarin_0 (Koki Teramoto)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

GCSへのFetch()がうまいこといかない。

解決したいこと

ReactのFetchを成功させたい。

発生している問題・エラー

re
Reactにおいて、GCSにFetchを行う仕組みを作っております。
Fetchが必ず失敗するのですが、なぜでしょうか?

function getData() {
    fetch("https://storage.googleapis.com/BUCKET_NAME/MY_FILE",{
        mode:'cors',
        method:'GET'
    })
        .then((res) => function(res){
            //data = res;
            //console.log(res)
            console.log("Success.");
            return res;
        })
        .catch(
            console.log("Faild.");
        )
}

↓以下、ブラウザコンソールにて

Faild.

自分で試したこと

CORSは設定済み、また、URL等も何度も確認し、間違いはありませんでした。

1

3Answer

catch()で得られるエラーの内容を確認するところから始めてはいかがでしょうか。

1Like

Comments

  1. @0_terarin_0

    Questioner

    ご回答ありがとうございます。
    この質問の前に、catch()でエラー内容を確認したのですが、エラーが出なかったです。というか、どういうわけかcatch()にエラーをコンソールに吐かせる文章を書くとなぜかcatch()文さへ実行されなくなりました。

fetch()内部でエラーが発生してthenをパスして、catchへチェーンされている。

function getData() { ?
  fetch()
    return res;  ?

fetch().then(return res).catch()のチェーンの意味を理解するのは難しいです。私も簡単な解説が思い浮かびません。

チェーンはカッコ内部で受け取ったデータを加工して、後段のメソッドにデータを渡しています。unixのパイプと同じ概念です。

さて、カッコ内の return res; はcatchメソッドにresを渡すのでしょうか?それとも、そこで終了するのでしょうか?終了すると、誰がresを受け取るのでしょう?
 また、fetchのカッコ内にはreturnは何故無いのでしょう!

mode:'cors',

デホルトで不要なのでは?getも

別のサンプルを参考にしては?

1Like

Comments

  1. @0_terarin_0

    Questioner

    真摯なアドバイスをありがとうございます。今後の開発に繋げていきたいと思います。

ちょっと気になる部分をコメントしますね。
エラーハンドリング部分の構文が間違っているようです。.catchメソッドは関数を引数として受け取るはずですが、現在のコードでは直接文字列をログ出力しています。適切な書き方は以下の通りです:

.catch((error) => {
    console.log("Failed.", error);
})

次に、GCSからデータを取得するためのfetch関数の使い方が少し間違っています。.then()メソッドはPromiseを返す関数を引数に取りますが、現在のコードでは引数resを取る関数を定義していますが、それが実行されていません。これは次のように修正すべきです:

.then((res) => {
    console.log("Success.");
    return res.json(); // もしくはres.text()など、レスポンスの形式に応じて適切なメソッドを使用します
})

以上を修正した上で、再度試してみてください。なお、依然として問題が解決しない場合、エラーの詳細情報が必要となります。具体的なエラーメッセージや、GCSのCORS設定などの詳細な情報を提供いただけると、より具体的な解決策を提示できるかもです!

1Like

Comments

  1. @0_terarin_0

    Questioner

    ご返答ありがとうございます。
    提示していただいた方法で無事にエラーを解決することができました!

Your answer might help someone💌