I have this code
async function dataget(APIURL){ let x = false; let xhr = new XMLHttpRequest(); xhr.open("GET", APIURL); xhr.send(); xhr.onload = await function(){ if(1 == 1){ x = true }else{ x = "gg" } } console.log(x) } console.log(dataget("data.json"));
I want console to wait until onload function ends (when x = true), but this doesn’t happen, console returns false and doesn’t wait
this is the output:
I want an explanation not just the solve
Advertisement
Answer
You need to turn the dataget
function to return a promise
which will resolve after the onload
function executed, so you can await it and return
the result.
function dataget(APIURL){ return new Promise((resolve, reject) => { let x = false; let xhr = new XMLHttpRequest(); xhr.open("GET", APIURL); xhr.send(); xhr.onload = function(){ if(1 == 1){ resolve(true) }else{ resolve("gg") } } }) } (async () => { const result = await dataget("data.json") console.log(result); // true })()