SvelteKIt - 访问会话 - 调用外部组件的函数

Thi*_*rez 1 typescript svelte sveltekit

我正在将 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

我该如何解决这个问题?

非常感谢!

dum*_*umm 5

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

来自文档

“...商店不是自由浮动的对象:它们必须在组件初始化期间访问,就像使用 访问的其他任何东西一样getContext。...商店本身(...)需要在组件或页面上同步调用未使用 $-前缀时初始化。改为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
  }
}
Run Code Online (Sandbox Code Playgroud)