Javascript Fetch API - jak zapisać wyjście do zmiennej jako obiektu (Nie obietnicy)

Proszę, Jak mogę zapisać wyjście fetch do zmiennej - aby móc pracować z nią jak z obiektem?

Oto kod:

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)

Finał console.log pokaże obiekt. Ale kiedy próbowałem zapisać go do zmiennej {[2] } niż console.log(obj) nie będzie trzymać obiektu, ale obietnica.

Konsola

Jakiś pomysł proszę, jak przekształcić go w obiekt zapisany w zmiennej?

Author: Vlasta Po, 2017-07-10

2 answers

Aby uzyskać nowoczesne podejście async / wait , zapoznaj się z odpowiedzią @ PrathameshMore poniżej


.json() jest metodą asynchroniczną (sama zwraca obietnicę), więc w następnej .then()

var obj;

fetch('https://jsonplaceholder.typicode.com/posts/1')
  .then(res => res.json())
  .then(data => obj = data)
  .then(() => console.log(obj))
 39
Author: yuriy636,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-28 19:26:23

Zamiast przechowywać w zmiennej, Utwórz funkcję, która zwróci dane, a następnie przechowuje je w zmiennej. Więc może być dostępny w całym pliku.

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);
        }
    }

Następnie wywołaj tę funkcję, aby uzyskać dane

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

Update

Z aktualną wersją Node.js v14. 3. 0 obsługuje asynchroniczne oczekiwanie na najwyższym poziomie

import axios from 'axios';

const response = await axios('https://quote-garden.herokuapp.com/api/v2/quotes/random');
console.log(response.data);

Uruchamianie tego pliku za pomocą node --harmony-top-level-await top-level-async-await.js

Wyjście

wyjście

Więcej Szczegółów: https://medium.com/@pprathameshmore/top-level-await-support-in-node-js-v14-3-0-8af4f4a4d478

 12
Author: Prathamesh More,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-30 04:11:48