web-dev-qa-db-fra.com

Javascript Fetch API - Comment enregistrer la sortie dans une variable en tant qu'objet (pas la promesse)

S'il vous plaît, comment puis-je enregistrer la sortie de l'extraction dans une variable - pour pouvoir travailler avec elle comme avec un objet?

Voici le code:

var obj;
fetch("url", {
  method: "POST",
  body: JSON.stringify({
    "filterParameters": {
      "id": 12345678
    }
  }),
  headers: {"content-type": "application/json"},
  //credentials: 'include'
})
.then(res => res.json())
.then(console.log)

Le dernier console.log Affichera un objet. Mais quand j'ai essayé de l'enregistrer dans la variable .then(res => obj = res.json()), la console.log(obj) ne contiendra pas l'objet, mais la promesse.

Console

Une idée s'il vous plaît, comment le transformer en un objet enregistré dans la variable?

11
Vlasta Po

.json() est une méthode asynchrone (elle retourne une promesse elle-même), vous devez donc affecter la valeur analysée dans la prochaine .then()

var obj;

fetch('https://jsonplaceholder.typicode.com/posts/1')
  .then(res => res.json())
  .then(data => obj = data)
  .then(() => console.log(obj))
20
yuriy636

Au lieu de stocker dans une variable, créez une fonction qui renverra des données, puis stockez-les dans une variable.

 async fetchExam(id) {
    try {
        const response = await fetch(`/api/exams/${id}`, {
            method: 'GET',
            credentials: 'same-Origin'
        });
        const exam = await response.json();
        return exam;
    } catch (error) {
        console.error(error);
    }
}

Appelez ensuite cette fonction pour obtenir des données

 async renderExam(id) {
    const exam = await fetchExam(id);
    console.log(exam);
}
0
Prathamesh More