javascript - 在异步函数中同步设置变量
问题描述
function foo()
{
let a = 5;
setTimeout(function(){a = 6;}, 1000);
return a;
}
我怎样才能返回 6 foo
?我使用的异步函数实际上来自框架,而不是setTimeout
.
解决方案
就目前而言,您无法在给定的回调中返回 as setfoo
的值,因为执行 return 语句时尚未调用超时回调函数。 a
setTimeout
您可以做的是创建您的函数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());
})()
推荐阅读
- routing - 将流量从生产服务器路由到蜜罐
- c++ - 请求成员'push_back'向量c ++
- amazon-ec2 - 将站点迁移到 Cloudflare 可能会导致负载均衡器的活动连接数量增加的原因有哪些?
- sql - 同一张表中两个位置之间的日期差异与一个日期列
- pandas - 如何在 for 循环内的 Plotly 中注释子图
- javascript - 从 Webpack 3.x 迁移到 4.x
- sql-server - 如何使我的 SQL 标量函数具有确定性并在其中包含变量默认值
- php - Memcache 间歇性错误
- javascript - AJAX 使用响应返回 HTML
- python - 模型训练时间长