TypeScript 如何在承诺中导出常量

Ale*_*Luo 3 javascript npm typescript

我想要实现的是从数据库中获取一个数据,getter 方法是异步的,然后根据promise 返回值导出一个const 变量。

代码是这样的:

import {Storage} from "@ionic/storage";
//...
storage.get("setup_done").then((val)=>{
  export const FirstRunPage = val?'valueA':'valueB';
}) 
Run Code Online (Sandbox Code Playgroud)

但是,我收到一条错误消息:

Modifiers cannot appear here
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 为什么会这样?

CRi*_*ice 5

所有导出都必须出现在顶层,并且没有真正的方法可以像您想要的那样进行某种异步导出。

在我看来,您有两种选择。第一个,可能也是最简单的,就是导出 promise 本身:

import {Storage} from "@ionic/storage";
//...
export const FirstRunPagePromise = storage.get("setup_done").then((val)=>{
  return val ? 'valueA' : 'valueB';
})
Run Code Online (Sandbox Code Playgroud)

这意味着模块的使用者必须使用 using 访问值.then,就像任何其他承诺一样。

您的第二个选择是在解析时将值分配给变量,并为该变量导出一个 getter 函数:

import {Storage} from "@ionic/storage";
//...
let FirstRunPage: string;

storage.get("setup_done").then((val)=>{
  FirstRunPage = val ? 'valueA' : 'valueB';
});

export function getFirstRunPage() {
  return FirstRunPage;
}
Run Code Online (Sandbox Code Playgroud)

你必须使用 getter,因为导入变量本身会给你一个副本,当 promise resolves 时它不会更新

这种方法意味着您可以同步访问该值,如果您过早访问它,它将是undefined. 因此,您的所有代码都必须先检查该值是否存在,然后再使用它。或者你作为开发人员必须知道,任何访问该值的代码都只会在 promise 得到解决后运行。

我个人推荐选项 1,但我之前都做过,最终这取决于您的用例。做对你的情况有意义的事情。