我正在尝试了解 JavaScript 异步/等待功能。
所以我写了一段简短的代码来理解它,但它给了我不寻常的行为/结果。
var a = 10;
function load_data(data) {
setTimeout(() => {
a = data
}, 2000);
}
function print() {
console.log(a);
}
async function init() {
await load_data(40);
print();
}
init();
我预计记录的值是 40,但使用 async 和 await 记录的值是 10。
最佳答案
异步 await depends on Promises ,但是您没有在代码中的任何地方做出 promise 。因此,等待 load_data
不会等待。
尝试使用 promise 并在超时触发后解决:
function load_data(data){
return new Promise(resolve => setTimeout(() => {
a=data
resolve()
}, 2000))
}
此外,我们假设这只是为了学习 async/await...否则您应该考虑以这种方式使用全局变量的所有常见建议。一旦你的代码变得更大,这就会变得一团糟
var a = 10
function load_data(data){
return new Promise(resolve => setTimeout(() => {
a=data
resolve()
}, 2000))
}
function print(){
console.log(a)
}
async function init(){
await load_data(40);
print();
}
init();
关于javascript - 异步等待异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444424/