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