簡體   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