[英]how to assign a top-level const from a promise when top-level await is not available
我试图在顶层分配一个const
,其中值需要来自异步函数。 但是,我正在使用的生产服务器上的 nodejs 版本还不够新,无法支持 await,所以我不能这样做:
const value = await f(x)
我不能在then
之类的东西中声明变量,因为它不在顶级范围内,所以这样的东西不起作用:
f(x).then(val=>{const value=val}) // no top-level const value afterwards
如何在此环境中正确初始化const
?
如果它有帮助,对于这种特殊情况,该函数实际上确实为我传递的特定值同步返回,但由于它被定义为异步并且有时异步返回,它实际上一直在返回一个 Promise。
作为一种(可怕的)解决方法,我考虑简单地将const
分配给 Promise,然后在需要时使用.then()
提取值。 然而,尽管 Promise 被解决,这似乎总是导致值被异步提取,这意味着它不会工作,因为当我需要值时我需要它,而不是在当前函数完成后或任何时候。
您需要用“let”而不是 const 定义您的 var,然后在“then”中分配值。
let value;
f(x).then(val => value = val)
也许您有更好的方法来做到这一点,但是根据我们的上下文,我会这样做。
您必须在函数内移动所有需要该 const 值的代码。 要么将它移动到(大) then
回调中,要么创建一个async
函数包装器。
因此,假设您的代码现在如下所示:
async function f(x) {
// ....
return //...
}
function g(value) {
// something
}
const value = await f(x);
// ...
g(value);
// ...
console.log(value);
// ...
然后将其更改为:
(async function main() {
async function f(x) {
// ....
return // ...
}
function g(value) {
// something
}
const value = await f(x);
// ...
g(value);
// ...
console.log(value);
// ...
})(); // Execute main
好的,并非绝对需要移动其中的所有内容,但这只是说明了如何解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.