Is it possible to wait until the fetch
instruction has completed before executing the next code / instruction (just like how AJAX waiting works)?
These functions are actually used to request the “privacy value” of a post from the Facebook Graph API. How can I keep an alert box from running until everything is over (i.e. the chained fetching in FirstRequestToGraph
and RequestNextPage
)?
function RequestNextPage(NextPage) {
fetch(NextPage, {
method: 'GET'
})
.then(function(response) {
return response.json();
})
.then(function(json) {
if (json.data.length == 0) {
console.log("ended liao lur");
}
else {
RequestNextPage(json.paging.next);
}
})
.catch(function(err) {
console.log(`Error: ${err}`)
});
}
function FirstRequestToGraph(AccessToken) {
fetch('https://graph.facebook.com/v2.8/me?fields=posts.limit(275){privacy}%2Cname&access_token=' + AccessToken, {
method: 'GET'
})
.then(function(response) {
return response.json();
})
.then(function(json) {
NextPage = json.posts.paging.next;
})
.catch(function(err) {
console.log(`Error: ${err}`)
});
}
FirstRequestToGraph(AccessToken)
.then(function() {
RequestNextPage(NextPage); // Recursively until there's no more next page.
})
.then(function() {
alert("everything has ended nicely"); // Still pop up before `RequestNextPage` completed.
});
2
Answers
If you have an asynchronous function in your component, like this…
Then you can call it, and wait for it download, with the await command, using something like this…
You’ll also want to update getJSON(),
return fetch()
toreturn await fetch()
.async
is wonderful. So isawait
.Check it out: Mozilla Developer Network: Async Function