javascript - 异步等待异常行为

标签 javascript async-await

我正在尝试了解 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/

相关文章:

javascript - 淡出 div 的一侧,同时让褪色的颜色渗入

JavaScript 异步/等待 : await is a reserved word

c# - 当内部调用不是自然异步时,如何创建自然异步方法?

javascript - 如何检查 javascript 数组中是否存在项目

javascript - 在 IE8+ 中访问对象中的唯一属性

javascript - 大数字的 Node.js 输出格式

javascript - NodeJS Express 应用程序 await 仅在异步函数中有效,但这显然是异步函数?

async-await - 如何在 Tokio 中使用 async/await 语法?

c# - 可以将 "async"与 ThreadStart 方法一起使用吗?

javascript - 同步调用 JavaScript 类方法