woodytang's recent timeline updates
woodytang

woodytang

V2EX member #151599, joined on 2015-12-16 10:22:49 +08:00
2025 年 JavaScript 明星项目
程序员  •  woodytang  •  Jan 16  •  Lastly replied by zls3201
23
陆家嘴金融公司使用的技术栈和实习机会
酷工作  •  woodytang  •  Jan 14  •  Lastly replied by woodytang
6
写了 2 天的 Python ,有点奇怪的感觉。。。
程序员  •  woodytang  •  Apr 2, 2024  •  Lastly replied by yjhatfdu2
33
大家身边有没有比自己水平高的女程序员
 •  woodytang  •  Oct 14, 2020  •  Lastly replied by weilongs
26
大家来聊聊 React 和 Vue3 在 2020 年 10 月这个时间点的选择
  •  1   
    程序员  •  woodytang  •  Oct 10, 2020  •  Lastly replied by RRRSSS
    47
    Docker Hub 挂了?
    然而并没有  •  woodytang  •  Jan 26, 2021  •  Lastly replied by brMu
    7
    今天整理电脑桌,发现捡垃圾浪费好多钱,得戒了~
  •  2   
    程序员  •  woodytang  •  Jan 3, 2020  •  Lastly replied by woodytang
    109
    woodytang's recent replies
    Jan 17
    Replied to a topic by ruonu 程序员 2026 年选 mac 还是 win,一起交流下
    从来不用 Windows ,但是 PC 和 Mac 都得有
    飞牛+gitea
    @superhot

    事件是这样的,emit("xxx",'咕咕咕'), listen('xxx',(text)=>{console.log("通知":text)})
    回调是这样的
    async fn(handle){
    handle('咕咕咕')
    }

    handle(text){
    console.log("通知":text)
    }

    await fn(handle)

    --------

    它们本质都是 解决异步情况下,也就是在不确定什么时候的情况下,A 给 B 发消息的问题,,
    事件是发出去不管的,它和监听者没有绑定关系

    回调是是绑定的,可以追踪,可以测试的

    但是事件可以批量订阅,你要发广播可以使用事件,

    如果你只是要链式执行,使用回调
    如果是新项目,你会选 Swoole ?
    要开发快,选 ts/node
    要跑得快 选 go
    要复杂稳定 选 java

    Swoole 就是一个外挂,给一堆老弱病残项目续命

    当然,PHP 是世界上最好的语言
    import { once, EventEmitter } from 'node:events';
    import process from 'node:process';
    //定义一个 事件喇叭
    const ee = new EventEmitter();

    process.nextTick(() => {
    //在异步队列里 喇叭发消息
    ee.emit('myevent', 42);
    });

    // 只处理一次的监听器,在主流程执行完后,会听到这个消息
    const [value] = await once(ee, 'myevent');
    console.log(value);

    const err = new Error('kaboom');
    process.nextTick(() => {
    // 在异步队列里 喇叭发消息,但这次发的是一个 nodejs bug 设计,'error'是 nodejs hardcode 的 key ,你发这个消息相当于抛异常
    ee.emit('error', err);
    });

    try {
    //虽然你没有监听'error', 但是 nodejs 内部强迫你监听了
    await once(ee, 'myevent');
    } catch (err) {
    //虽然只是发了个消息,但是确抛了个异常
    console.error('error happened', err);
    }



    这个是大傻逼设计,消息是消息,异常是异常,违反 solid 原则,后来的 bunjs 运行时 不鼓励使用这种方式控制流程,
    一般会使用 promise ,在异步方法里 throw 异常,然后使用 Controller ,控制异步任务的退出,也可以。

    另外 现代化运行时框架 认为,用事件做控制流是反模式 是 anti pattern ,会把代码搞得很乱,不可追溯,一般采用 回调 来响应事件,更符合函数式编程


    这样可以过面试吗?
    Jan 15
    Replied to a topic by woodytang 程序员 2025 年 JavaScript 明星项目
    @littleshy 凡是像 java spring boot 的 js 框架,都是有问题的,像什么 nestjs ,,好的不学,学那些复杂又没用的东西,,面向对象,,IOC 容器,,现在都是 serverless ,FP ,谁会玩容器啊,,一上来占掉一大块内存~
    Jan 15
    Replied to a topic by woodytang 程序员 2025 年 JavaScript 明星项目
    @Terry05 当你能理解它们解决什么问题的时候,就会觉得 NB 了
    比如 Tailwind 这种原子化 class ,
    shadcn headless UI ,
    这两个可以让组件拷来拷去,,直接吊打以前的那种 ant design 之类的 UI 库,这就是革命性的变化

    然后 有人嫌 Tailwind 字符串编程不够强大,马上就有人研究 panda css 这种 type safe 的方式用 js 写 css

    ---
    前端社区就是这样进步的

    有人想 ts 这么好,为什么不取代 js ,马上就有人搞出 bunjs 这样的 纯 ts 运行时~性能接近 go ,rust

    这才是现代化的开发精神
    Jan 15
    Replied to a topic by woodytang 程序员 2025 年 JavaScript 明星项目
    @iorilu spring boot 才是重灾区,全是样板代码,ai 一改一个准,前端至少还有点变化
    我做了一个框架,一直在用,,只要定义数据库,,从后端到前端一键生成
    为啥要防抖,我就是想要抖怎么办
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2789 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:57 · PVG 16:57 · LAX 01:57 · JFK 04:57
    ♥ Do have faith in what you're doing.