V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
yazoox
V2EX  ›  JavaScript

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

  •  
  •   yazoox · 2022-03-28 16:28:18 +08:00 · 1250 次点击
    这是一个创建于 974 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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?

    想听听大家的意见。

    谢谢!

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1999 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:20 · PVG 00:20 · LAX 08:20 · JFK 11:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.