首页 > 解决方案 > 一些 fetch() 之后如何导出一些东西

问题描述

我有以下代码:

class ProjectStore {
  constructor(projects: IProjectStrict[]) {
    this.projects = projects;
    makeAutoObservable(this);
  }

  projects: IProjectStrict[];
}

export const ProjectStoreInstance = new ProjectStore(projects);

但是projects,我传递给构造函数的 是 API 调用的结果。我既不能export在异步 IIFE 中使用:

(async () => {
  await fetchProjectList(url);
  export const ProjectStoreInstance = new ProjectStore(projects);
})();

也不在构造函数中使用await权限

export const ProjectStoreInstance = new ProjectStore(await fetchProjectList(url));

这样做的正确方法是什么?

标签: typescript

解决方案


You can use top-level await since Typescript v3.8 (source), something like in this ts playgroud.


class ProjectStore {
  constructor(projects: IProjectStrict[]) {
    this.projects = projects;
    // makeAutoObservable(this);
  }

  projects: IProjectStrict[];
}

const url = 'asd';
const porjectList: IProjectStrict[] = await fetchProjectList(url);
export const ProjectStoreInstance = new ProjectStore(porjectList);

interface IProjectStrict {
  a: string;
}

function fetchProjectList(url: string): Promise<IProjectStrict[]> {
  return new Promise<IProjectStrict[]>(resolve => resolve([]));
}

推荐阅读