ホームページ >ウェブフロントエンド >jsチュートリアル >HTTP ステータス コードに基づいてフェッチ プロミスを手動で拒否するにはどうすればよいですか?

HTTP ステータス コードに基づいてフェッチ プロミスを手動で拒否するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-10 01:21:02532ブラウズ

How Can I Manually Reject Fetch Promises Based on HTTP Status Codes?

Fetch: HTTP ステータス コードに基づいた Promise 拒否の制御

フェッチの領域では、通常、Promise はネットワーク エラーが発生した場合にのみ拒否されます。ただし、4xx または 5xx HTTP ステータス コードが返されるシナリオでは、Promise はデフォルトでは拒否されません。

問題:
提供されたコードで、次のことを試みています。 HTTP 応答ステータスがエラーを示している場合、Promise をインターセプトして拒否します。ただし、Promise は期待どおりに拒否されません。

理由:
ネットワーク エラーが発生した場合、Promise のフェッチは TypeError でのみ拒否されます。 4xx および 5xx 応答はネットワーク エラーではないため、キャッチできるものは何もありません。 Promise を手動で拒否するには、自分でエラーをスローする必要があります。

解決策:
この問題を解決し、HTTP ステータスに基づいて Promise を拒否するには、次のようなコード:

import 'whatwg-fetch';

function fetchVehicle(id) {
    return dispatch => {
        return dispatch({
            type: 'FETCH_VEHICLE',
            payload: fetch(`http://swapi.co/api/vehicles/${id}/`)
                .then(res => {
                    if (!res.ok) {
                        const error = new Error('HTTP Error: ' + res.status);
                        throw error; // Throwing the error here will cause fetch to reject the promise
                    }
                    return res;
                })
                .then(res => res.json())
                .catch(error => {
                    throw error;
                })
            });
    };
}

フェッチ Promise 内にエラー処理ロジックを導入することで、HTTP 応答ステータスが次のことを示している場合に Promise を手動で拒否できるようになりました。不成功状態。これにより、redux ミドルウェアの catch ブロックでエラーを適切にキャプチャして処理できるようになります。

以上がHTTP ステータス コードに基づいてフェッチ プロミスを手動で拒否するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。