首页 > 解决方案 > Svelte:如何手动停止订阅?

问题描述

我有一个商店,它会根据用户的操作不时获取数据。这是一个商店,因为它的数据在全球范围内使用,主要是所有组件都需要最新的可用数据。

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

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

Svelte doc's uses中的唯一示例onDestroy(),但我需要手动停止它subscribe()

我尝试了一个简单的“计数”(如果计数> 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;
        }
    });

这是一个完整的工作 REPL:

https://svelte.dev/repl/95277204f8714b4b8d7f72b51da45e67?version=3.35.0

标签: javascriptsvelte

解决方案


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


这是经过一些改进的最终工作 REPL: https ://svelte.dev/repl/95277204f8714b4b8d7f72b51da45e67?version=3.35.0


推荐阅读