0
votes

Obtenez indéfini lors de la tentative de lecture de la réponse renvoyée de l'API dans React JS

in réactif ... J'essaie de lire la réponse retour de l'API et d'être indéfini, quel est le problème?

non défini se produit lors de l'appel de la fonction retrieveItems () code> du composant. P>

**// component calling the item service** 
import React from 'react'
import ItemService from "../Services/ItemService";

class Posts extends React.Component {
  constructor(props) {
    super(props);
  }

  componentDidMount = () => {
    this.itemservice=new ItemService();
    **console.log(this.itemservice.retrieveItems())**
  }

  render() {
    return (
      <h1>Posts List</h1>
    );
  }
}

export default Posts;


1 commentaires

RetroveItem ne renvoie pas le résultat Axios. Gardez à l'esprit que c'est un prometteur il fonctionne de manière asynchrone


3 Réponses :


2
votes
componentDidMount = () => {
  this.itemservice=new ItemService();
  this.itemservice.retrieveItems().then(res=>{
    console.log(res);
  }).catch(error=>{
    console.log(error)
  });
}

4 commentaires

Le retour ajouté ne fera plus cela plus synchrone, n'est-ce pas?


Merci Aviya pour votre réponse, j'ai une question. Pouvons-nous dire que nous devons utiliser "alors" en cas de fonction d'appel qui contient un appel API?


@Devyaghi bien le puis est obligatoire en raison de l'appel AJAX. Je ne peux penser à aucun appel d'API qui ne serait pas AJAX depuis que cela gâcherait la demande toujours en attente d'une réponse du serveur. Donc, probablement, alors est nécessaire.


@ aviya.developer Merci beaucoup mon problème résolu



0
votes

Comme je l'ai mentionné dans le commentaire, la méthode retrieveItems ne renvoie pas de valeur. Pour résoudre ce retour, l'axios appelle xxx

ou réécrivez-le à async / attendre pour une meilleure lisibilité xxx

maintenant dans votre journal de console que vous devez ne voyez pas la réelle réponse de l'appel d'API mais une promesse. Pour obtenir la réponse réelle, vous devez également attendre la réponse au côté de l'appelant: xxx

avec ceci, vous devez voir la réponse dans le journal de la console.


0 commentaires

0
votes

Le problème est le piège typique de vouloir renvoyer quelque chose à partir d'une fonction de rappel à la fonction extérieure. Cela ne peut pas fonctionner, car la fonction extérieure ( retriediems ) est déjà terminée. Vous devez rester dans le motif asynchrone. Le plus facile est probablement ce: xxx


0 commentaires