大家周末好,天气这是越来越冷了,冬季到来了。西安冬日的传统雾霾又上演了,不过最近又限行了,希望能有点用处吧。好了今天不说什么新的东西,把之前的坑给填一填吧。

上篇文章的最后给大家留了一个问题,如果顺序的执行多个promise,已经有同学答对了,就是用链式调用。的确答案就是如此,那么具体一点怎么做链式调用呢?那么我们来看一个例子吧。

var guid = 0;
function run() {
  guid++;
  var id = guid;
  return new Promise(resolve => {
    setTimeout(function () {
      console.log(id);
      resolve(id);
    }, (Math.random() * 1.5 | 0) * 1000);
  });
}

var promises = Array.from({ length: 10 }, run);
Promise.all(promises)

上篇文章(上边的例子)中我们看到了 使用promise.all可以把几个promise组合起来使用,那么如果我们想让这些promise顺序执行改怎么办呢?来看答案。

var guid = 0;
function run() {
  guid++;
  var id = guid;
  return new Promise(resolve => {
    // resolve in a random amount of time
    setTimeout(function () {
      console.log(id);
      resolve(id);
    }, (Math.random() * 1.5 | 0) * 1000);
  });
}

var promises = Array.from({ length: 10 }).reduce(function (acc) {
  return acc.then(function (res) {
    console.log(res)
    return run().then(function (result) {
      res.push(result);
      return res;
    });
  });
}, Promise.resolve([]));

这里有点很有意思,我们先创建了一个创建一个长度为10的Array出来,然后呢,调用了其上的reduce方法,关键是这个reduce方法有意思了,传入的初始值是个resolved的promise,然后传入了一个function,其作用就是将这些promise都chain了起来。这样达到了顺序调用的目的,当然可以用其他写法达到目的,但是使用reduce还是有点意思的。大家有兴趣了可以自己来试试。

OK,之前在介绍DockerFile的时候图表君还是留了问题。下边的DockerFile其实定义的是有问题的。

    FROM node:4.6
     MAINTAINER Aaron Chen<mail@aaronchen.cn>
 
     RUN mkdir /app
     WORKDIR /app
     COPY . /app
 
     RUN npm install
     
     EXPOSE 8080

那么问题在哪呢?问题就是这样的DockerFile我们就不能利用webpack-dev-server的hot reload的特性了。这对于开发阶段是相当大的效率影响的,那么如何解决呢,也是比较容易的,我们将代码做成一个volume挂到容器里就解决问题了。

下边说几句非技术的话题,技术的道路做久了,都会考虑到技术路线的问题,作为一个年轻人图表君并没有太多的经验,但是上周看到了池建强老师的一篇文章,说的挺好,在这里分享给大家。

技术发展(这里只谈我了解的软件)不外乎三条路:算法、底层和业务。能在一条路上精通,就很不错了。而厉害的人可以同时兼顾两条路。三条都牛的人,蛮罕见的。

技术1:算法路线


走算法路线,对智商的要求是高于其它路线的。但也不能说高到哪里去了。毕竟在企业里做算法工作,更多的是应用成熟算法,而不是自己设计算法。

算法路线比较适合耐得住寂寞的人,因为做算法常常是站在产品的幕后,好的结果又往往需要慢慢「熬」出来。算法往高走,对基础的要求就比较高了。不是博士出身,没在顶尖研究机构混过,在企业里也很难做出特别牛的成果。所以一般本科生不太建议走这个方向(当然,本科生也不用太难过,毕竟没退学生也做出过一些惊人的成就,池建强注)。

技术2:底层路线

底层路线,是围绕着操作系统、编译原理、分布式系统、数据库、软件工程这些理论,用各种工具搭建出酷酷的应用开发、运行环境。把各种复杂的工具跑起来,不仅和谐共处,还能发挥各自的长处,弥补各自的短处,并不是个简单工作。如果能再自己开发一些好用工具,就更不简单了。

极客、黑客范儿的人,是最适合走这条路线的。爱折腾,爱尝鲜,崇尚开源文化,细致缜密,是做好这一行的标签。

运维、DevOp、云计算、大数据、架构师,这些岗位或领域的人,多是能呼云唤雨的底层高手。


技术3:业务路线

大多数技术都是在业务线生存和创造价值的。如果论技术光环,这条线是比不过前两条的,容易产生「对技术能力要求不高」的感觉。从某些角度看,确实如此,但这条线也有自己独步天下的技术,那就是复杂业务建模能力。
修炼这项能力,除了技术的通用要求外,还需要比其它路线更强的沟通能力和抽象能力。或者说,对情商的要求最高。

适合自己的才是最好的,到底走那条路线是一个选择问题,做出自己的选择,并坚持的走下去。这可能是漫长和痛苦的过程。好了,唠唠叨叨了这么多,今天就写到这吧,我们下周见。


原创文章,欢迎转发,但请标明出处。欢迎关注图表君的公众号,一起成长。在微信中搜索 “多彩数据” 或者 “Data_Visualization”


aaronisme
143 声望20 粉丝