强烈推荐pomelo及插件的代码向ES8靠拢

Node 7.0.0开始支持ECMAScript 2017的async await了,pomelo去除了c++部分也能用最新版的node运行了,可以说进了一大步。
async await可以说是避免回调地狱的终极解决方案,也能解决Promise不能良好解决的分支问题,保持逻辑清晰,加上Webstorm支持的Google Closure Compiler注解,代码简直爽的不要不要的。贴一段:

/** @typedef {{username:string, password:string}} UserData */

/**
 * Create a new account. Doesn't check username and password.
 *
 * @param {UserData} opt
 * @return {Promise<?User>}
 */
static async createNewAccount(opt) {
    const options = {
        username: opt.username,
        password: opt.password
    };
    const collection = await mongodb.collection(COLLECTION);
    const doc = await collection.findOne({username: options.username});
    if (doc != null) {
        return null;
    }
    const userData = {
        username: options.username,
        password: UserDao._saltAndHash(options.password)
    };
    const user = new User(userData);
    const result = await collection.insertOne(user.toObject(), {safe: true});
    user.id = result.insertedId;
    return user;
}

在Node刚支持ES6的时候,一些维护很积极的库就把代码用Promise重写了,现在估计又要用async await重写了。能够改变世界的pomelo及其组件插件demo,如果也能基于async await来写,那就太好了。

标签: pomelo 移动开发 灌水闲聊 建议与改进
xymeng 在 2017-2-24 00:19发布
xymeng 在 2017-2-24 00:21重新编辑 分享到 weibo
3 回复
#1 {4} wangxy 2017-2-24 09:51 回复

如果后面再出什么其他的语法糖呢?

感觉相关的策略还是跟着nodejs 标准库的调子,目前nodejs 自己本身的代码中还是以es5 + 部分es6的特性为主

另,比起来代码风格的一致性以及代码的易读性,是否使用最新特性似乎显得并不是那么重要。下一步的想法更多地是想去改善代码风格的一致性以及代码的易读性,还有改进整个pomelo的运维,profile,debug支持

xymeng 2017-2-24 19:07 回复

谢谢回答~看来是内部人员啊~哈哈。pomelo的底层机制和插件,外部人员根本没能力&魄力去搞,这点强烈支持。
async应该是关于异步的终极语法糖了。今天有个振奋人心的消息,Nodejs v7.6.0 发布了,要点主要还是async。

关于代码的易读性,我是用Webstorm来阅读lordofpomelo的,web-server部分就不提了,game-server部分,各种各种波浪线,一个函数根本关联不到对应的定义。也许原生的JSer早就习惯了。我是由Java转来的,感觉非常非常的苦恼。比如,pomelo-logger其实就两个API,configure和logger。但是我读了半天源码才敢勉强下这个结论。如果是Java,只需要点一个“.”就知道了。这些其实是可以解决的,Webstorm支持的JSdoc注解+class+async可以打造强类型语言的编程体验。

MissLee 2017-3-10 09:21 回复

先别搞新功能了,赶紧用ES7翻修把,回调要死人啦

MissLee 2017-3-27 08:57 回复

nodejs 标准库和express框架的代码比较落后,请不要参考nodejs 标准库,而是参考koa的代码,阿里巴巴、饿了么等很多大公司的技术栈都是用的koa框架。框架用ES7写的好处就是没有回调,代码非常简洁,也能减少隐患。

#2 {1} yuguo138 2017-2-27 10:07 回复

ES7被Node7.6原生支持了,这是最好的消息。希望那些个包都能换成新语法,老语法主要是追踪起来太不方便。

xymeng 2017-2-28 19:45 回复

koa的追求语法糖的理念非常好,今天试了一下,发现webstorm自身在代码追踪这块是很有问题的。webstorm用调用关系追踪JavaScript发现追踪不出什么东西,然后就用全文搜索来匹配函数,然后就有了灾难性的后果,代码高亮不正确,追踪也是各种乱追踪,用户还不能设置取消。不仅如此,就连用调用关系来追踪还有bug,还4年都没解决https://youtrack.jetbrains.com/issue/WEB-6667#u=1475497945199
现在感觉用pomelo做游戏的底层还不成熟,只能从荆棘中采拾鲜花了

#3 {5} reerayxia 2017-3-13 13:21 回复

好久没冒泡了,刷下存在感
本人用pomelo一年有余吧,一个人无聊,用业余时间,开发一个游戏,开发了一半。。
没学过NodeJS,基本说是啥是NodeJS都不懂的那种!
回归正题
没看懂你们说啥,根据代码意思猜测?
是不是以后不用cb了?
somefunc(dat1,dat2,cb){}

xymeng 2017-3-13 23:36 回复

是的。var、回调、call、bind、apply、prototype在node v7.6.0/ES2017面前都是deprecated的东西,function也回归它的函数本意。目前,pomelo及插件充斥着大量的deprecated的东西,这些落后的生产关系严重阻碍了pomelo生态建设,无法满足先进生产力的发展要求,已经到了该闹革命的时候,同志,起义吧!

xymeng 2017-3-13 23:42 回复

新的函数应该这样写
定义:
module.exports = class SomeClass {
static async someFunc(dat1,dat2){
// TODO: ...
}
};
使用:
const result = await SomeClass.someFunc(dat1,dat2);

reerayxia 2017-3-14 07:46 回复

@xymeng 我的神啊!!那确实是翻天覆地的变化啊!!

MissLee 2017-3-27 09:00 回复

@xymeng function也过时了
箭头函数 + class剔掉了function,还修正了this的问题
class + extends + super剔掉了prototype

xymeng 2017-3-27 21:59 回复

@MissLee
网易大神:爱用用,不用滚

回到顶部