为什么async/await关键字是如此重要

现在JS里有async/await了,处理异步代码几乎不再有什么争议,但还是会有人有疑问,为什么不把所有函数都定义成async的,然后所有函数调用都写成await的,这样最终不就可以省略掉所有的async/await关键字了吗(默认隐式async/await)?这样不就达成了“天下无异步”的太平盛世了吗?

只要稍微动点脑筋就不会有这种想法。

【万吨巨轮,史前天坑】h5pal是怎样练成的 - 开篇

h5pal AKA 仙剑奇侠传Web版是我造过最大的轮子,也是开过最大的坑。曾经装过的逼,终究是要还,不然我脸被打得啪啪响那还了得。虽然早就没更新(呃,准确的说,是自从开源以后就再也没更新),但对我自己而言心里其实还是想把这个坑给填了——至少是以另一种方式——也就是现在这个新坑——h5pal是怎样练成的。

其实一开始我是想做一个PPT完事儿,但最后发现信息量放进一个PPT里实在是有点太大了,还是老老实实的写文章吧。

挖坑如山倒,填坑如抽丝,今天是第0篇,开坑之作自然也没什么干货(逃,不过重点是先帮助我自己梳理一下这艘万吨巨轮要从何说起。

所以开篇其实只是一个提纲性质,我的打算是按照模块又底层到表层来慢慢介绍h5pal是如何从船坞到下水,当然我在写的过程中也毫无疑问肯定会被自己当年写的代码丑到吐,看我都吐了的份上,你们就别跟着吐槽了是吧……

继续探索JS中的Iterator,兼谈与Observable的对比

前言

JavaScript 2015中引入了Generator Function(相关内容可以参考前作ES6 generator函数与co一瞥ES6 generator函数与co再一瞥),并且在加入了Symbol.iterator之后,使得构造拥有自定义迭代器的集合变得相当容易(可以参考前作在JavaScript中实现LINQ——一次“失败”的尝试)。

前几天在群里@徐叔提出了这样一个问题:

1
2
3
4
5
function* listen(element) {
element.addEventListener('click', function(e) {
// 这里怎么把e通过外面的listen给yield出去?
})
}

音锤思婷……

我理解,叔叔写listen的目的是为了把事件源抽象成一个“可以被遍历的集合”。

补几个2017年2-3月大作简评

补几个2017年2-3月大作简评,《仁王》、《地平线:零之曙光》、《尼尔:自动人形》。

仁王 地平线 尼尔
画面 8 10 8
流畅度 10 9 10
剧情叙事 8 9 10
场景 8 10 7
战斗 9 9 9
音乐音效 7 8 10
系统 10 8 8
容量 9 9 8
小游戏 - - -
细节 8 8 9
总评 8.6 8.9 8.8

备注:

  1. 仁王系统集大抄,丰富但不杂乱,抄得挺好。
  2. 仁王后期关卡质量下降,刷刷刷能玩多久取决于对极品装备以及秒杀BOSS有大热情。
  3. 地平线系统也抄,然而乏善可称,没什么缺点也没什么亮点,比如抄巫师3追踪这就可有可无。
  4. 尼尔的ACT战斗部分给11分都不为过,但弹幕游戏劣质且(中后期)占比过高,减分。
  5. 尼尔的伪开放世界场景突出一个傻大空,不知道做这么大干啥……
  6. 听说尼尔PS4画质很狗牙,于是我买了PC,然而PC画质也好不到哪去。

总的来说,仁王和尼尔各自有一些创新点,也有明显的短板,尤其是尼尔。反过来看地平线就是好莱坞大片,高工业水准保证它起点就很高,但要有创新就显得更难了。

三者都是绝对能值回票价的。

由于我没有NS,所以无法评价《塞尔达:荒野之息》了。由于我个人不感冒,也没有买《女神异闻录5》。不过从目前的风评看,这两者也都是神作级别的,肯定是差不了。

补几个2016年游戏的简评

补几个2016年游戏的简评,黑暗之魂3、极限竞速地平线3、看门狗2、最终幻想15、守望先锋,顺便把之前写过的神秘海域4和古墓丽影10也搬过来。

黑魂3 地平线3 看门狗2 FF15 神秘海域4 古墓丽影崛起 守望先锋
画面 9 10 9 9 10 10 9
流畅度 10 8 9 8 9 9 10
剧情叙事 8 - 8 6 10 8 -
场景 10 10 9 9 10 10 8
战斗 10 - 7 10 9 9 10
音乐音效 8 9 8 10 9 9 8
系统 9 9 9 8 9 9 9
容量 9 9 8 10 9 10 9
小游戏 - - 7 7 8 8 -
细节 9 9 8 9 10 9 9
总评 9.1 9.1 8.2 8.6 9.3 9.1 9

我的年度游戏: 神秘海域4:贼途末路