node-sync 这么好用的库为啥没什么人用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
haozes
V2EX    Node.js

node-sync 这么好用的库为啥没什么人用?

  •  
  •   haozes 2016-05-20 15:17:01 +08:00 5413 次点击
    这是一个创建于 3507 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/ybogdanov/node-sync

    node 的回调太蛋疼了,业务一复杂,再加上错误处理,那代码仅只日狗...,看了不少库,co,promise,yield 感觉都不是很方便.这个库,一下把代码精练了许多,用 fiber 处理应该性能问题不大

    // Run in a fiber Sync(function(){

    // Function.prototype.sync() interface is same as Function.prototype.call() - first argument is 'this' context var result = asyncFunction.sync(null, 2, 3); console.log(result); // 5 // Read file synchronously without blocking whole process? no problem var source = require('fs').readFile.sync(null, __filename); console.log(String(source)); // prints the source of this example itself 

    })

    但就是不知道这玩意为啥没什么人用,难道太坑?

    28 条回复    2016-05-21 18:17:12 +08:00
    Septembers
        1
    Septembers  
       2016-05-20 15:41:41 +08:00
    尽可能不要修改内置类型的 prototype
    see https://v2ex.com/t/190956#r_2061759
    arden
        2
    arden  
       2016-05-20 16:08:53 +08:00
    好东东,有这东东,就不用把函数转成 async function 或者 function()*了。
    colatin
        3
    colatin  
       2016-05-20 16:15:27 +08:00
    每个 fiber 会有个栈,如果在复杂应用里广泛使用,估计会死得很难看
    xjp
        4
    xjp  
       2016-05-20 16:23:53 +08:00
    如果想用 fib 的话 来这里 http://fibjs.org 孢子社区全站都是用这个写的
    daysv
        5
    daysv  
       2016-05-20 16:50:10 +08:00
    尽可能不要修改内置类型的 prototype +1
    Jaylee
        6
    Jaylee  
       2016-05-20 17:00:05 +08:00
    还是更喜欢 await / async
    tomoya92
        7
    tomoya92  
       2016-05-20 17:54:10 +08:00
    用 async 顺手了
    sox
        8
    sox  
       2016-05-20 17:58:50 +08:00 via Android
    搞反了吧, co 还不方便
    fds
        9
    fds  
       2016-05-20 18:12:10 +08:00
    因为不喜欢 fiber ,运行时程序流程变复杂了
    djyde
        10
    djyde  
       2016-05-20 18:14:16 +08:00
    第三方入侵你的 prototype 是很危险的。

    何况有 async/await
    mercurylanded
        11
    mercurylanded  
       2016-05-20 18:35:47 +08:00
    用 rxjs
    alexapollo
        12
    alexapollo  
       2016-05-20 19:25:28 +08:00
    代码不兼容?栈的大小过大?
    haozes
        13
    haozes  
    OP
       2016-05-20 19:27:32 +08:00 via iPhone
    @colatin 太多估计会影响性能
    haozes
        14
    haozes  
    OP
       2016-05-20 19:28:10 +08:00 via iPhone
    @Septembers 这个应该不算修改 protype 吧
    orcusfox
        15
    orcusfox  
       2016-05-20 20:02:39 +08:00
    es6 已经自带 promise 了 不再需要其他的库
    maomaomao001
        16
    maomaomao001  
       2016-05-20 20:05:15 +08:00 via Android
    已得 node 恐惧症..... 求 node 可视化包管理工具
    node 一言不合就开始联网下东西.....还下的特别慢慢
    和 gradle 有的一比...
    sox
        17
    sox  
       2016-05-20 20:15:46 +08:00 via Android
    @maomaomao001 下东西难道不是因为你执行了需要连接网络的操作,怪 node 干什么
    haozes
        18
    haozes  
    OP
       2016-05-20 21:31:38 +08:00 via iPhone
    @napsterwu promise 是无法完全解决回调地狱问题的,而且会传染所有的地方都得用 promise
    haozes
        19
    haozes  
    OP
       2016-05-20 21:32:55 +08:00 via iPhone
    @maomaomao001 比 gradle 还是好多了,那货经常下不来
    maomaomao001
        20
    maomaomao001  
       2016-05-20 21:36:29 +08:00
    @sox 不是啊,明明下载过的东西,比如 ts 项目,它为什么每次都要下一遍 typescript 全部东西....速度还那么慢....就不能用本地的吗? 问题,到底又没用比较好用可视化管理工具?
    sox
        21
    sox  
       2016-05-20 21:45:45 +08:00
    @maomaomao001 有哪个包管理器有增量更新的功能,求告知
    Jaylee
        22
    Jaylee  
       2016-05-21 00:45:06 +08:00
    @sox 增量肯定是没有,不过 npm 3 开始就将依赖扁平化了,大大节省了项目中下载依赖的时间
    magicdawn
        23
    magicdawn  
       2016-05-21 09:03:46 +08:00
    orcusfox
        24
    orcusfox  
       2016-05-21 09:15:41 +08:00
    @haozes 你可以看看 mongoose 是怎么用的 可 callback 可 promise 解决不了回调地狱是你方式不对
    julor
        25
    julor  
       2016-05-21 10:53:02 +08:00 via Android
    为何还停留在如此落后的回调方式,不直接上 golang ?
    haozes
        26
    haozes  
    OP
       2016-05-21 15:04:27 +08:00
    @napsterwu
    Collection.prototype.update = function(selector, document, options, callback) {
    var self = this;

    // Add ignoreUndfined
    if(this.s.options.ignoreUndefined) {
    optiOns= shallowClone(options);
    options.ignoreUndefined = this.s.options.ignoreUndefined;
    }

    // Execute using callback
    if(typeof callback == 'function') return updateDocuments(self, selector, document, options, callback);

    // Return a Promise
    updateDocuments(self, selector, document, options, function(err, r) {
    if(err) return reject(err);
    resolve(r);
    });
    });
    }

    mongoose 用这种方法解决的,判断 callback 类型,想想这代码写得有多费劲...

    https://github.com/digitaldesignlabs/es6-promisify
    这个库倒可以稍微简单一点把 callback 接口转换成 promise 接口.
    haozes
        27
    haozes  
    OP
       2016-05-21 15:05:13 +08:00
    @julor
    这个...Golang 太灰主流了.没法招人啊
    julor
        28
    julor  
       2016-05-21 18:17:12 +08:00 via Android
    @haozes 不认为,难道 nodejs 找来的都很牛逼? golang 招过来 3 天不能贡献代码,此人可开除!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2675 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:57 PVG 21:57 LAX 05:57 JFK 08:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86