async函数中console.log未等待XMLHttpRequest异步操作的问题解析
问题原因解释
await的使用完全无效:你给xhr.onload赋值时加了await,但await的作用是等待一个Promise完成,这里你await的是一个普通函数定义,不是Promise。这个赋值操作是同步完成的,根本不会等待onload回调执行,所以代码会直接跳到console.log(x)那一行。XMLHttpRequest的
onload是异步回调:xhr.send()发送请求后,JavaScript不会暂停等待响应返回,而是继续执行后续代码。onload回调只有在服务器响应回来后才会被触发,这时候console.log(x)早就执行完了,所以打印的是初始值false。async函数的返回特性:dataget是async函数,不管函数内部有没有显式return,调用它都会直接返回一个Promise对象,而不是你期望的x的值。所以外层的console.log(dataget("data.json"))打印的是Promise,而非最终的x。
内容的提问来源于stack exchange,提问作者HamzaElkotb
相关产品推荐
相关产品推荐

