I've just started to learn the Fetch API: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Here's a code snippet which I wrote to tinker around with it:
fetch('http://swapi.co/api/people/1')
.then(function(response) {
var json = response.json();
console.log(json);
// Expected : { "name": "Luke Skywalker","height": "1.72 m", ... }
// Get : Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
});
I would have expected to get an JSON object out of response.json().
Similar to what you get when using JSON.parse().
Instead I get a promise object.
If I enlarge the promise chain like shown here ...
return response.json().then(function(json) {
// process your JSON further
});
... then it works: Within the then method of the following promise it appears as json.
Why can't I retrieve the JSON data within the then() of the first promise?
Can anyone please explain what is going on here?
I would really much appreciate it.
json return a promise? Because you receive the response as soon as all headers have arrived. Calling . json() gets you another promise for the body of the http response that is yet to be loaded.
json() The json() method of the Response interface takes a Response stream and reads it to completion. It returns a promise which resolves with the result of parsing the body text as JSON .
fetch() starts a request and returns a promise. When the request completes, the promise is resolved with the Response object. If the request fails due to some network problems, the promise is rejected.
To get JSON from the server using the Fetch API, you can use the response. json() method. The response. json() method reads the data returned by the server and returns a promise that resolves with a JSON object.
because response.json() returns another promise (which is within your function body)
https://developer.mozilla.org/en-US/docs/Web/API/Body/json
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With