1

我将 SvelteKit 与 Typescript 一起使用。在 $lib 文件夹中,我有一个 .ts 文件。

我尝试从'$app/stores'.ts 文件中访问用户/会话。

import { get } from 'svelte/store';    
import { session } from "$app/stores";

function getUser(){
  const {user} = get(session);
  console.log(user);
}

但是当调用该函数时,我在控制台中收到以下错误消息:

未捕获(承诺中)错误:在组件初始化外部调用的函数

我该如何解决这个问题?

非常感谢!

4

1 回答 1

3

我不知道您在什么时候调用getUser,但它可能在组件初始化之外的其他时间(否则您不会收到此错误),这意味着您需要以不同的方式构造事物。

从文档

“......商店不是自由浮动的对象:它们必须在组件初始化期间访问,就像其他可以访问的东西一样getContext......商店本身(......)需要在组件或页面上同步调用不使用 $-prefix 时的初始化getStores改为安全地.subscribe异步使用。”

这表示:

  1. 不要session在这种情况下使用getStores,请自己使用并分配给会话:const { session } = getStores()
  2. 确保const { session } = getStores()在组件初始化期间调用。

例子:

import { get } from 'svelte/store';    
import { getStores} from "$app/stores";

function getUser() { // <- call this at component initialization
  const { session } = getStores();
 
  return {
    current: () => get(session).user
  }
}
于 2021-07-09T17:26:44.693 回答