liushuaikobe
V2EX  ›  Node.js

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

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



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

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

    写起来像这样的:

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

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

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

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