想在另外一个 thread/worker 里面 monitor, subscribe 一个事件,有什么好的方法么?

2022-03-28 16:28:18 +08:00
 yazoox

react+typescript, redux + redux-saga

有一个 UI 组件(也是一个 npm package),用的是上面的技术栈写的。现在我们团队要引入 LaunchDarkly ,来设置 feature flag 。目前,通过 saga ,建立一个 event channel ,来 monitor launchdarkly 的 sdk client 。当服务器,设置了某个 feature flag on or off 的时候,sdk client 能够收到通知,“该功能打开 /关闭了“。然后 saga 的 event channel 就能够收到,并派送一个 action ,UI 就能够 ”显示 /隐藏“对应的功能。工作挺好的。

// ldClient is the initialized LaunchDarkly client
export function listen(ldClient: any): any {
  return eventChannel(emitter => {
    const callback = (settings: any) => {
      emitter(settings);
    };

    ldClient.on("change", callback);

    return () => {
      ldClient.off("change", callback);
    };
  });
}

接下来,我们后继要开发很多个这样的 UI 组件(每个 ui-component 是独立的,在一个 webview 或者浏览器的 tab page 里面,只会有一个这样的 ui component),也可以按照上面的 pattern/template 来使用 LaunchDarkly 。

但是,每个 ui component ,都需要在 saga 里面写上两三段几乎一模一样的代码,我觉得这样重复的代码太多了。以后如果这段逻辑需要一点小修改,得改 N 个 packages 并且再发布。
所以,我想有没有办法,把这段逻辑,放到一个 pakcage 里面,然后所有的 ui component 都引用这个 package 就行了。

比如,

  1. 能否用 work.js monitor launchdarkly client change. 在 ui-component 组件里面和这个 worker.js 通讯。当 launchdarkly client 的 "change" 事件触发了,就通知 ui-component 刷新 UI
  2. 或者 使用 hooks? 自己写一个 hooks, 能否 monitor 或者 subscribe launchdarkly client on change?

想听听大家的意见。

谢谢!

1250 次点击
所在节点    JavaScript
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/843421

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX