繁体   English   中英

当顶级等待不可用时,如何从承诺中分配顶级常量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM