在异步功能中同步设置变量

时间:2020-02-19 16:07:30

标签: javascript function asynchronous return

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

如何为foo返回6?我正在使用的异步函数实际上来自框架,而不是setTimeout

1 个答案:

答案 0 :(得分:1)

按现状,您无法使foo返回给定a的回调中设置的setTimeout的值,因为执行return语句时尚未调用超时回调函数。

您可以做的是使函数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());
})()