Je dois détecter l'erreur 401 Code de réponse afin de pouvoir réessayer après l'obtention d'un nouveau jeton à partir du noeud final de jeton. J'utilise la méthode fetch pour obtenir les données de l'API.
const request: Request = new Request(url.toString(), {
headers: this.defaultRequestHeaders,
method: "get",
mode: "cors"
});
const headers: Headers = new Headers({
"Accept": "application/json",
"Content-Type": "application/json"
});
fetch(request)
.then(function(response)
{
///Logic code
})
.catch(function(error)
{
///if status code 401. Need help here
});
Vous pouvez vérifier l'état et si ce n'est pas 200 (ok) jeter une erreur
fetch("some-url")
.then(function(response)
{
if(response.status!==200)
{
throw new Error(response.status)
}
})
.catch(function(error)
{
///if status code 401...
});
Étant donné que 401
est en fait une réponse valide à une demande adressée à un serveur, il exécutera votre réponse valide quel que soit le résultat. La clause catch
n'est utilisée que si des problèmes de sécurité se produisent ou si le serveur ne répond pas ou est tout simplement indisponible. Pensez-y comme si vous essayiez de parler à quelqu'un. Même s'ils disent "Je ne suis pas disponible actuellement" ou "Je n'ai pas cette information", votre conversation était toujours réussie . Seulement si un responsable de la sécurité se trouve entre vous et vous empêche de parler au destinataire, ou si le destinataire est dead , il y aura un échec réel dans la conversation et vous devrez y répondre en utilisant une catch
.
Séparez simplement votre code de traitement des erreurs afin que vous puissiez le gérer dans les cas où la demande a abouti, mais n'a pas le résultat souhaité, aussi bien que lorsqu'une erreur réelle est générée:
function catchError( error ){
console.log( error );
}
request.then(response => {
if( !response.ok ){
catchError( response );
} else {
... Act on a successful response here ...
}
}).catch( catchError );
J'utilise le response.ok
suggéré par @Noface dans les commentaires, ce qui est logique, mais vous pouvez ne vérifier que le response.status === 401
si vous le souhaitez.
Vous pouvez vérifier la status
de la réponse dans then
:
fetch(request)
.then(function(response) {
if (response.status === 401) {
// do what you need to do here
}
})
.catch(function(error) {});
Vous pouvez essayer ceci
fetch(request)
.then(function(response) {
if (response.status === 401) {
// do what you need to do here
}
})
.catch(function(error) {
console.log('DO WHAT YOU WANT')
});