首页 > 解决方案 > 在异步函数中同步设置变量

问题描述

function foo()
{
	let a = 5;
	setTimeout(function(){a = 6;}, 1000);
	return a;
}

我怎样才能返回 6 foo?我使用的异步函数实际上来自框架,而不是setTimeout.

标签: javascriptfunctionasynchronousreturn

解决方案


就目前而言,您无法在给定的回调中返回 as setfoo的值,因为执行 return 语句时尚未调用超时回调函数。 asetTimeout

您可以做的是创建您的函数async并将调用包装setTimeout在 Promise 中,然后等待该承诺以允许setTimeout调用回调,然后最终返回a

async function foo() {
  let a = 5;
  await new Promise(resolve => {
    setTimeout(function() {
      a = 6;
      resolve();
    }, 1000);
  });
  return a;
}

(async () => {
  console.log("running...")
  console.log(await foo());
})()


推荐阅读