2017-08-28 1 views
-1

J'ai la fonction suivante qui provient de la pile mern.io.Utilisation de l'extraction, comment gérer correctement le rejet

export default function callApi(endpoint, method = 'get', body) { 
    return fetch(`${API_URL}/${endpoint}`, { 
    headers: { 'content-type': 'application/json' }, 
    method, 
    body: JSON.stringify(body), 
    }) 
    .then(response => response.json().then(json => ({ json, response }))) 
    .then(({ json, response }) => { 
    if (!response.ok) { 
     return Promise.reject(json); 
    } 
    return json; 
    }) 
    .then(
    response => response, 
    error => error 
); 
} 

J'appelle la fonction de la manière suivante

callApi('auth/register', 'post', { 
     username, 
     password, 
}).then(function(res) { 
    // do stuff 
}); 

La réponse sera soit un 201 ou un 422. Comment gérer la 422 la bonne façon? Un 422 se produirait si un nom d'utilisateur existe déjà.

Est-ce que je mets toute la logique dans la première puis, comme les suivantes:

callApi('auth/register', 'post', { 
     username, 
     password, 
}).then(function(res) { 
    if (res.error) { 

    } else { 
    } 
}); 
+0

Il ne marche pas lancer une erreur et voici le code sur le repo: https://github.com/Hashnode/mern-starter/blob/master/client/util/apiCaller.js – Jose

+1

Le problème h que le dernier 'then' dans' callApi' est qu'il transforme n'importe quelle promesse défaillante en une promesse résolue dont IMO est juste stupide. Il devrait être omis entièrement – Phil

Répondre

1

En supposant callApi retourne un objet Promise:

callApi('auth/register', 'post', { 
     username, 
     password, 
}).then(function(res) { 
    // res 
}).catch(function(err) { 
    // handle err 
}); 

Pour plus d'informations: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise

+0

Il utilise https://github.com/matthew-andrews/isomorphic-fetch et il ne va jamais à la méthode catch. – Jose

+0

@Jose Vous pouvez lancer une nouvelle erreur dans votre gestionnaire de distribution. – hisener