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

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

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

    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 吧
    napsterwu
        15
    napsterwu  
       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
    napsterwu
        24
    napsterwu  
       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
    return new this.s.promiseLibrary(function(resolve, reject) {
    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   ·   实用小工具   ·   1050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:42 · PVG 03:42 · LAX 12:42 · JFK 15:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.