TypeScript如何在promise中导出const

时间:2017-12-22 19:19:10

标签: javascript typescript npm

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

代码是这样的:

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

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

Modifiers cannot appear here

enter image description here 为什么会发生这种情况?

1 个答案:

答案 0 :(得分:2)

所有导出都必须出现在顶层,并且没有办法像你想要的那样进行某种异步导出。

我认为你有两种选择。第一个,也可能是最简单的,只是导出承诺本身:

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

这意味着模块的消费者必须使用.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;
}

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

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

我个人推荐选项1,但我之前做过两次,最终取决于你的用例。做适合你情况的事情。