当前位置: 首页 > 知识库问答 >
问题:

Svelte:如何手动停止订阅?

通骁
2023-03-14

我有一个存储,它偶尔会根据用户的操作来获取数据。这是一个存储,因为它的数据是全局使用的,并且主要是所有组件都需要可用的最新数据。

但是,对于一个特定的组件,我只需要加载的第一个数据。

对于此组件,没有理由在第一次提取之后保持subscribe()函数运行。那么,如何才能停止这个订阅功能呢?

Svelte Doc的唯一示例使用ondestroy(),但我需要手动停止这个subscribe()

我用一个简单的“count”(如果count>1,则取消订阅)尝试了一下,但它不起作用。

    import user from './store'
    
    let usersLoaded = 0
    
    const unsubscribe = user.subscribe(async (data) => {
        if(data.first_name !== null) {
            usersLoaded = usersLoaded + 1
        }
        
        if(usersLoaded > 1) {
            unsubscribe;
            msg = 'First user was already loaded, but `user.subscribe()` is still running...';
        }
    });

下面是一个完整的工作报告:

https://svelte.dev/repl/95277204F8714B4B8D7F72B51DA45E67?版本=3.35.0

共有1个答案

红富
2023-03-14

我不得不使用unsubscribe()而不是unsubscribe

以下是最终的工作程序:https://svelte.dev/repl/95277204f8714b4b8d7f72b51da45e67?version=3.35.0

 类似资料:
  • 问题内容: 在摘要循环中,对变量进行脏检查,即是否有100个范围变量,并且如果我更改一个变量,则它将监视所有变量。 假设我有100个彼此独立的范围模型变量。如果我对一个变量进行了更改,那么我不想检查所有其他99个变量。有什么办法吗?如果是,怎么办? 问题答案: 令人惊讶的是,这通常不是问题,即使具有数千个绑定,浏览器也不会出现问题,除非表达式很复杂。的常见答案 是 。 解决方案: 从开始,这很容易

  • 问题内容: 我正在使用我的应用程序拨打电话。 一段时间后有什么办法可以终止通话?还是在ACTION_CALL开始之前设置一个计时器? 我正在使用Prasanta博客中的以下代码,但由于某些原因,导致出现以下错误。有什么建议? 无法解决 问题答案: 您的问题已被问过很多次了。简短的答案是,没有官方的方法可以做到这一点。 在一个问题中,有人建议打开飞行模式(应用程序当然需要权限才能执行此操作)。这很粗

  • 我无法停止。它的样式是。如何启动和停止圆形的小型?

  • 对不起,老问题。我已经澄清了。我如何用我可怜的线程类开始停止线程? 编辑:它在循环中,我想在代码开头再次重新启动它。我如何启动停止重新启动? 我的班级: 在主代码中,我希望:

  • 我不知道怎么才能停止滑动菜单。我想删除可以滑动的幻灯片菜单。我试着用代码注释。但我无法停止扮演slidemenu。 下面是我的代码。你能帮助我吗?非常感谢!:)

  • 问题内容: 该程序在九次打印后完成: 如何停止进程(例如eclipse中的Java进程),因为它在9秒的时间限制后没有停止? 问题答案: 您遇到的问题是,取消哔声任务后,调度程序会保留活动线程。 如果存在活动的非守护程序线程,则JVM保持活动状态。 它使该线程保持不变的原因是您已在此行中告诉它这样做: 请注意以下文档: -即使在空闲状态下要保留在池中的线​​程数。 因此,您有两种可能的方法来导致J