V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AmiKara
V2EX  ›  Node.js

Node Events 事件触发器 once 问题

  •  
  •   AmiKara · 2021-10-15 18:39:17 +08:00 · 4597 次点击
    这是一个创建于 894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看教程的过程中看到一个例子,觉得蛮奇怪的 https://www.nodejs.red/#/nodejs/events?id=%e7%bc%96%e7%a0%81%e5%ae%9e%e7%8e%b0

    这个解决并发问题的下面大篇幅的讲了 once 和 on 的区别,但是我亲手实践发现这里文件查找的例子将 once 换成 on 结果也是一样的, 这里难道不是基于 status 控制状态,readFile 是异步所以才能产生这个结果吗,为什么非要用 once 来解决,感觉用 on 来解决这里的问题也是一样的。。

    5 条回复    2021-10-15 22:38:09 +08:00
    autoxbc
        1
    autoxbc  
       2021-10-15 21:37:15 +08:00   ❤️ 1
    你是对的,这个例子并不恰当,为解释 once 硬拗了一个场景,实际并没有多次 emit,once 的效果也没用上
    AmiKara
        2
    AmiKara  
    OP
       2021-10-15 22:12:35 +08:00
    @autoxbc 能再请教一下,为啥 emit 就触发了一次吗?
    AmiKara
        3
    AmiKara  
    OP
       2021-10-15 22:15:07 +08:00
    能理解 readFile 只执行了一次,但是多次 for 循环后都返回了一个结果,这是同一个 emit 返回的吗?
    autoxbc
        4
    autoxbc  
       2021-10-15 22:35:08 +08:00   ❤️ 1
    代码逻辑简化后是这样:

    每一次 select 操作,都在 emitter 上挂了一个回调,但是只有第一个 select 触发了 readFile,后面的 select 都因为 status[file] = 'pending' 导致只挂了回调,没有触发 readFile

    这唯一的 readFile 得到数据后 emit 了唯一一次,并把前面挂上的回调一一执行,这多个返回结果都是同一个 emit 触发的

    所以这个例子是用一个 emit 触发了多个 once,并不是一个 once 被多次 emit 只触发一次,所以算是写跑题了
    AmiKara
        5
    AmiKara  
    OP
       2021-10-15 22:38:09 +08:00
    @autoxbc 谢谢大佬,明白啦~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5394 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:11 · PVG 17:11 · LAX 02:11 · JFK 05:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.