CNode

轻松给mongoose添加jscex的语法糖

Hhpf1908发布于14 年前最后回复14 年前9 回复7737 浏览0 收藏

今天下午捣鼓了一下小应用,使用老赵的jscex给mongoose添加了Async 同步方法,感觉还不错,至少对我来说相当节省开发效率,分享一下。

给mongoose添加jscex的方法很简单,只需要使用老赵的 ”Jscex异步增强模块“进行异步操作绑定即可,什么是”Jscex异步增强模块“在此我就不缀述了,感兴趣的同学直接访问 Jscex异步增强模块 即可。这里仅贴出mongoose的异步操作绑定代码,代码比较简单,就不一一说明了。

先贴一个加载异步增强模块的代码,我事先用npm安装了jscex,命令如下” npm install jscex jscex-jit jscex-async”,详细请看赵姐夫的说明,链接地址:https://github.com/JeffreyZhao/jscex/blob/master/README-cn.md

有了jscex,剩下就是加语法糖的代码了,只需做个简单的绑定

好了,下面以node-club源码里的User 对象做个例子测试一下

----------------------分割线----------------------------------

上面代码取自node-club里的源码,至此就可以用同步的写法去获取数据了,测试代码如下

看上面的例子是否觉得同步写法更简明易懂了?当然如果你不喜欢这样的写法也可以继续使用异步的方式,再贴一个用异步写法的例子,以作对比

查看回复

回复 (9)

J
jeffz#1·14 年前

不错不错,加油加油。不过好像测试的时候那段addEventListener有点没看懂是要干嘛的……还有addEventListener的那个回调函数是通过this访问的不是参数t,是不是文档哪里没有更新?

H
hpf1908#4·14 年前
引用 jeffz不错不错,加油加油。不过好像测试的时候那段addEventListener有点没看懂是要干嘛的……还有addEventListener的那个回调函数是通过this访问的不是参数t,是不是文档哪...

@jeffz 我觉得如果只有一两个回调的情况用的话确实很绕,不太适用,但是如果回调嵌套很深的话用起来还比较爽,我就可以专心写业务逻辑,用这个编程时得来回在异步和同步之间切换,确实有点恶心,哈哈

J
jeffz#5·14 年前
引用 jeffz不错不错,加油加油。不过好像测试的时候那段addEventListener有点没看懂是要干嘛的……还有addEventListener的那个回调函数是通过this访问的不是参数t,是不是文档哪...

@hpf1908 其实要切换什么跟普通异步事件也没什么两样:

somethingAsync().on("complete", function () {
    if (this.error) { ... } else { ... }
});

Task.prototype上补个on什么的是顺手的事情,你会发现和其他异步编程基本没区别。

H
hpf1908#6·14 年前
引用 jeffz不错不错,加油加油。不过好像测试的时候那段addEventListener有点没看懂是要干嘛的……还有addEventListener的那个回调函数是通过this访问的不是参数t,是不是文档哪...

@jeffz 恩,更新了通知一声,链式语法还是比较习惯的,另外异步增强里的fromCallback,我希望直接在返回值里挂一个叫_arguments的变量,这样我就不需要硬编码var splitAsync = Jscexify.fromCallback(split, "equals", "larger", "smaller"),取equals这种值

J
jeffz#7·14 年前
引用 jeffz不错不错,加油加油。不过好像测试的时候那段addEventListener有点没看懂是要干嘛的……还有addEventListener的那个回调函数是通过this访问的不是参数t,是不是文档哪...

@hpf1908 链式语法早就支持了吧,你只要补个on就行了,作为addEventListener的别名。

你是指Task自动返回个数组?主要我是想用名字来访问数据,不要用下标,用起来更方便。

H
hpf1908#8·14 年前
引用 jeffz不错不错,加油加油。不过好像测试的时候那段addEventListener有点没看懂是要干嘛的……还有addEventListener的那个回调函数是通过this访问的不是参数t,是不是文档哪...

@jeffz 不是返回数组,像这样 var result = splitAsync(xxx); result._data = []; 除了显示设值外还另外把所有返回值做成数组形式挂在_data 下,这样的话给异步方法绑定同步写法,我就可以直接用fromCallback 就可以去取到所有返回值,当然你说的那样可读性更好也规范

参与回复
登录后即可参与回复。登录