回调注册后执行注销

问题描述 投票:0回答:1

我写了一个简单的软件,当设置状态时,该软件允许用户“注册”功能。通过向数组添加函数可以轻松实现这一点。我想返回一个能够“取消注册”该特定功能的功能。请注意,用户可能两次注册相同的功能。这意味着“取消注册”功能不能基于作为键的功能。

唯一想到的是使“ register”函数的方式更加复杂,其中“ callbacks”数组中的每个项目不仅是一个函数,而且是这样的对象:

{
  id: someId
  fn: [the function]
}

并且取消注册功能将过滤someId值。但是我就是不喜欢这样。

想法?

const state = {}
const callbacks = []

const register = (fn) => {
  callbacks.push(fn)
  return () => {
    console.log('Unregister function. HELP!!! How do I do this?')
  }
}

const setState = async (key, value) => {
  state[key] = value
  for (const fn of callbacks) fn(key, value)
}

const getState = (key) => {
  return state[key]
}

const f1 = () => {
  console.log('f1')
}

const f2 = () => {
  console.log('f2')
}

const unregF1a = register(f1)
const unrefF1b = register(f1)
const unregF2 = register(f2)
setState('some', 'a')
unregF1a()
setState('some', 'b')

我写了一个简单的软件,当设置状态时,该软件允许用户“注册”功能。通过向数组添加函数可以轻松实现这一点。我想返回一个能够...

javascript callback
1个回答
0
投票

循环遍历您的回调并删除所需的功能(如果同一功能被注册两次,则可以使用)。您可以做一个简单的for循环:

© www.soinside.com 2019 - 2024. All rights reserved.