J'essaie de récupérer des données et de définir l'état dans l'application React. Alors que la récupération est réussie, comme je peux voir les données dans les outils de développement Chrome, l'exécution s'arrête à l'instruction await dans le code ci-dessous. Seule "obtenir des données" est enregistrée. On dirait qu'après l'instruction fetch, la fonction retourne, avec toutes les étapes suivantes exécutées avec succès.
Qu'est-ce que je fais de mal ?? Toute aide est très appréciée.
import util from "util"; const fetchProm = util.promisify(fetch) .... getDataFromDb = async () => { console.log('getting data') let result = await fetchProm("http://localhost:3001/getData") .then(data => { console.log("then1:",data) return data.json() }) .then(res => { console.log('then2:', res.data) return { data: res.data } }) .catch(err => { return { err: err.data } }); console.log("result:", result) this.setState({ data: result.data }) };
3 Réponses :
vous n'avez pas besoin de .then callback si vous utilisez async-await. essayez l'exemple ci-dessous:
import util from "util"; const fetchProm = util.promisify(fetch) getDataFromDb = async () => { console.log('getting data') let {data} = await fetchProm("http://localhost:3001/getData"); console.log("result:", data) this.setState({ data }) };
ça marche. mais avec plus de modifications. Je n'ai pas non plus besoin d'utiliser promisify. attendez simplement fetch (" localhost: 3001 / getData" ) fonctionne bien. Merci beaucoup pour le soutien.
Avec async / wait, vous n'avez pas besoin de puis
. Vous détectez également des erreurs sur le second alors et non sur le premier.
Pouvez-vous essayer:
let result = await fetchProm("http://localhost:3001/getData") console.log(result)
et voir si cela fonctionne?
ça marche. mais avec plus de modifications. Je n'ai pas non plus besoin d'utiliser promisify. attendez simplement fetch (" localhost: 3001 / getData" ) fonctionne bien. Merci beaucoup pour le soutien.
Lorsque vous utilisez async / await
, n'oubliez pas de gérer vos exceptions avec try / catch
Changez votre code en:
import util from "util"; getDataFromDb = async () => { try{ let {data} = await fetchProm("http://localhost:3001/getData"); this.setState({ data }) } catch(err=> this.setState({ err: err.data })) };
oui je l'ai en place. J'ai posté du code minimal ici. Quoi qu'il en soit, merci pour les commentaires.