JavaScript异步编程:Generator与Async
从Promise开始,JavaScript就在引入新功能,来帮助更简单的方法来处理异步编程,帮助我们远离回调地狱。Promise是下边要讲的Generator/yield与async/await的基础,希望你已经提前了解了它。 在大概ES6的时代,推出了Generator/yield两个关键字,使用Generator可以很方便的帮助我们建立一个处理Promise的解释器。 然后,在ES7左右,我们又得到了async/await这样的语法,可以让我们以接近编写同步代码的方式来编写异步代码(无需使用.then()或者回调函数)。 两者都能够帮助我们很方便的进行异步编程,但同样,这两者之间也是有不少区别的。
数组的遍历你都会用了,那Promise版本的呢
这里指的遍历方法包括:map、reduce、reduceRight、forEach、filter、some、every因为最近要进行了一些数据汇总,node版本已经是8.11.1了,所以直接写了个async/await的脚本。但是在对数组进行一些遍历操作时,发现有些遍历方法对Promise的反馈并不是我们想要的结果。 当然,有些严格来讲并不能算是遍历,比如说some,every这些的。但确实,这些都会根据我们数组的元素来进行多次的调用传入的回调。 这些方法都是比较常见的,但是当你的回调函数是一个Promise时,一切都变了。
NPM实用指北
npm作为下载node附送的大礼包,大家一定不会陌生。然而关于npm,估计大量的只是用到npm install XXX以及npm run XXX。 其实这里边还有很多有意思的命令&参数。关于npm,大概有两个作用: 能让我们很方便的从网上下载第三方包进行实现功能 能够让我们自己编写包,并上传到网上供其他人下载
如何从0开发一个Atom组件
最近用Atom写博客比较多,然后发现一个很严重的问题。。没有一个我想要的上传图片的方式,比如某乎上边就可以直接copy/paste文件,然后进行上传。然而在Atom上没有找到类似的插件,最接近的一个,也还是需要手动选择文件,然后进行上传。这个操作流程太繁琐,索性自己写一个插件用好了。 成品插件下载地址:https://atom.io/packages/atom-image-uploader
使用JavaScript实现一个俄罗斯方块
清明假期期间,闲的无聊,就做了一个小游戏玩玩,目前游戏逻辑上暂未发现bug,只不过样子稍微丑了一些-.-项目地址:https://github.com/Jiasm/tetris在线Demo:http://blog.jiasm.org/tetris/?width=16&height=40 (修改URL参数可以调整难度)
使用postman进行API自动化测试
最近在进行一个老项目的升级,第一步是先将node版本从4.x升级到8.x,担心升级会出现问题,所以需要将服务的接口进行验证;如果手动输入各种URL,人肉check,一个两个还行,整个服务。。大几十个接口,未免太浪费时间了-.-;因为是一个纯接口服务的项目,所以打算针对对应的API进行一波自动化测试;所以就开始寻找对应的工具,突然发现,平时使用的PostMan貌似也是支持写测试用例的-.-,所以就照着文档怼了一波;一下午的时间,很是激动,之前使用PostMan仅限于修改Header,添加Body发送请求,从来没有考虑过拿PostMan来进行测试,一下午的使用,感觉发现了新大陆。
一个有味道的函数
最近想到了一个自认为很有意思的面试题如何实现一个compose函数。函数接收数个参数,参数均为Function类型,右侧函数的执行结果将作为左侧函数执行的参数来调用。
柯里化与反柯里化
最近在看一本书《JavaScript函数式编程》里边提到了一个名词,柯里化(currying),阅读后发现在日常开发中经常会用到柯里化函数。以及还有他的反义词反柯里化(unCurrying)柯里化被称为部分计算函数,也就是会固定一部分参数,然后返回一个接收剩余参数的函数。目的是为了缩小适用范围,创建一个针对性更强的函数。反柯里化正好与之相反,我们是要扩大一个函数的适用范围,比如将Array独有的push应用到一个Object上去。
FlowType简易入门指北
写了一段时间JavaScript了,作为一个弱类型语言,无视类型判断在开发过程中带来了很多的好处,int与float的转换、string与int的拼接。都可以直接通过一元运算符得到结果。但同样的,代码量上去了以后,整个项目会变得非常复杂。在开发过程中很难看出一段代码执行后的结果,或者一个函数参数/返回值的结构。有很多bug是在运行时才发现的。
JavaScript中的比较运算符
JavaScript中的比较运算符粗略的可以分为两种: 相等运算符(==、===、!==)这些 关系运算符(>、<、>=)在平时开发中,基本不会太关注这两者的差异,我们几乎总是可以获取到我们想要的结果-。-