liushuaikobe
V2EX  ›  Node.js

你们写 js 各种回调也是这么一层一层吗?

  •  4
     
  •   liushuaikobe · May 7, 2014 · 6098 views
    This topic created in 4414 days ago, the information mentioned may be changed or developed.
    新手一个,写node各种异步啊。。于是就有了这样的代码出现:



    这种情况下该怎么写比较好啊,求轻喷
    33 replies    2014-05-08 14:59:39 +08:00
    rails3
        1
    rails3  
       May 7, 2014   ❤️ 2
    eventproxy
    liushuaikobe
        2
    liushuaikobe  
    OP
       May 7, 2014
    @rails3
    竟然是朴灵大大写的。。赞,这就去试试~
    jsonline
        3
    jsonline  
       May 7, 2014 via Android
    用具名函数替换匿名
    bingdian
        4
    bingdian  
       May 7, 2014   ❤️ 1
    subpo
        5
    subpo  
       May 7, 2014
    正常的很,es6有解决方案,这些都是js的原生方式,没必要用什么特别的库
    liushuaikobe
        6
    liushuaikobe  
    OP
       May 7, 2014
    @subpo
    可能还不大适应这种写法,看些来有点别扭
    akfish
        7
    akfish  
       May 7, 2014   ❤️ 8
    每次看到这种代码,就会脑补开唱:
    如果你愿意
    一层一层一层的
    剥开我的心
    你会鼻酸
    你会流泪
    jia0
        8
    jia0  
       May 7, 2014 via Android
    @akfish 赞!
    undozen
        9
    undozen  
       May 7, 2014
    callbackhell.com

    简单解决:给回调命名
    优雅解决:promise
    liushuaikobe
        10
    liushuaikobe  
    OP
       May 7, 2014
    @akfish
    眼泪掉下来。。
    akinoniku
        11
    akinoniku  
       May 7, 2014
    我用async
    liushuaikobe
        12
    liushuaikobe  
    OP
       May 7, 2014
    @undozen
    赞!
    liushuaikobe
        13
    liushuaikobe  
    OP
       May 7, 2014
    @undozen
    给函数命名确实能让代码看起来舒服很多,除了命名本身带给人的烦恼(不知道取什么名字好)。。
    chemzqm
        14
    chemzqm  
       May 7, 2014
    Promise和async的API记不住,我用自己写的 https://github.com/chemzqm/parallel 没几行代码,测试100%覆盖,客户端通用
    paloalto
        15
    paloalto  
       May 7, 2014
    之前用过这个: https://github.com/chemdemo/node-stepify

    写起来像这样的:

    tyzc
        16
    tyzc  
       May 7, 2014
    支持promise,这是个非常优雅的解决方法。
    Actrace
        17
    Actrace  
       May 7, 2014
    既然习惯函数式编程,就不要用回调特性嘛。。。
    bolasblack
        18
    bolasblack  
       May 7, 2014
    promise 已经被选为 ES6 里的解决方案
    async 的 waterfall 也非常好用

    两个都可以试用一下,然后挑一个自己最喜欢的
    andyhu
        19
    andyhu  
       May 7, 2014
    async性能好一点,promise更优雅点,不过将来es6的generator是大势所趋,可以用下tj写的的co
    没有装0.11版本的同学也可以考虑用facebook的regenerator模仿下es6的generator特性
    fundon
        20
    fundon  
       May 7, 2014
    Next generator 是趋势
    ChiChou
        21
    ChiChou  
       May 7, 2014
    @akfish 把我的台词抢了……
    j
        22
    j  
       May 7, 2014
    coffee please...
    Ever
        23
    Ever  
       May 7, 2014
    clowwindy
        24
    clowwindy  
       May 7, 2014
    tangzx
        25
    tangzx  
       May 7, 2014 via iPhone
    @akfish 哈哈哈哈,如果爱,请深爱
    mcfog
        26
    mcfog  
       May 7, 2014
    必须用Promise

    generator在展现出同等的异常处理能力之前,只能作为promise的附属存在

    展现出同等的异常处理之后,还要解决API描述困难的问题才能赶上promise
    icanfork
        27
    icanfork  
       May 8, 2014
    @rails3
    世界上本没有callback,写的人多了,就有了 }}}}}}}} -- BelinChung
    jinbakei
        28
    jinbakei  
       May 8, 2014
    promise
    celon
        29
    celon  
       May 8, 2014
    async.waterfall也是不错的选择
    crossmaya
        30
    crossmaya  
       May 8, 2014
    q.js
    zythum
        31
    zythum  
       May 8, 2014
    其实 朱一觉得啊...写callback挺好的...
    countcain
        32
    countcain  
       May 8, 2014
    可以看看 defer promise 机制
    arron
        33
    arron  
       May 8, 2014
    @clowwindy 我看那个测试第一个就说明不了什么问题,他那个闭包比new object每次执行都多创建了一个函数,实际上他只是测试了创建100万个函数要多出多少内存。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1186 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 100ms · UTC 23:43 · PVG 07:43 · LAX 16:43 · JFK 19:43
    ♥ Do have faith in what you're doing.