【问题标题】:TypeScript how to export const in a promiseTypeScript如何在promise中导出const
【发布时间】:2018-06-05 09:27:39
【问题描述】:

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

代码是这样的:

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

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

Modifiers cannot appear here

为什么会这样?

【问题讨论】:

  • 但是为什么呢?!为什么不在不同的模块中执行请求并在那里使用它呢? “以后再导出”是不可能的。评估一个模块并将其导出加载到另一个模块中。现在正在等待。
  • 这个,在那里动态导出一些东西是没有意义的。相反,您可能希望导出一个对象,该对象将在可用时更改其内部属性之一,或者更好的是,导出一个返回值的 Promise。

标签: javascript typescript npm


【解决方案1】:

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

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

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,但我之前都做过,最终这取决于您的用例。做对你的情况有意义的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-08
    • 2021-12-19
    • 2017-06-05
    • 2020-06-02
    • 2018-06-26
    • 2022-11-26
    • 2019-06-18
    • 2021-09-22
    相关资源
    最近更新 更多