一、Promise、Generator、async-await
ES6说白了就是一套标准,没有大家想的那么高大上。学习这套标准已经是趋势了,所以建议大家多深入学习。
ES6很多篇文章都有讲解,这里我们只对Promise/Generator/async-await进行分析讲解。讲解完后,大家要在平时开发多点使用,加强记忆。
1. Promise
Promise通俗易懂来说,它就是相当于一个容器,接受两个函数(分别是:reslove/reject)作为参数。成功就执行reslove、失败就执行reject。最后这两个函数都返回同一个promise对象,基于这点,所以我们可以使用链式调用(代码更加简洁易懂)。
下面举个例子来加强印象:(两个写法都可以的,建议使用第二种)
方式一:
//Demo function testPromise ('test.txt') { // 返回一个promise对象 return new Promise((resolve, reject) => { fs.readFile(path,"utf8", function (error, data) { if (error) reject(error); else resolve(data); }) }) }
方式二:
//Demo testPromise('test.txt') .then( data => { // 成功回调 console.log(data) }) .catch( error =>{ // 抛出异常, console.log(error) })
2. Generator
generator是ES6用来解决异步编程的一个方案,它是一个生成器函数。有一个作用可以让我们的异步操作暂停。通常跟yield一起出现使用的。生成器函数有一个特征,function关键字与函数之间有一个 * 。
下面举个例子让大家知道generator的用法:
我们结合yield一起使用
//Demo function *Add(a, b) { let sum = a + b yield console.log(sum) let sub = a - b yield console.log(sub) } let count= Add(2, 7) count.next() // 输出 /* 9 */
通过上面的这个简单的例子,我们可以看到当代码运行到yield的时候,异步就会暂停。当执行next()这个方式,异步就会继续运行。(简单理解就是:每遇到一个yield就会暂停,next()就继续,以此类推)
使用生成器函数有个好处,可以让我们的代码一直保持同步语法。
3、async-await
ES7出了async-await,使得我们的代码更加简洁,而且还不需要引入第三方库。使用成本很低的。下面我们就开始讲解async-await。
下面举个简单的例子让大家理解如何使用async-await:
//Demo function Test1 () { return '前端' } async function Test2 () { return '大神之路' } async function Result () { //等待一个字符串 var r1 = await Test1 () // 等待一个promise对象,await的返回值是promise对象resolve的值,也就是'大神之路' var r2 = await Test2 () console.log(r1 + r2) } Result() // 得到的结果是'前端 大神之路'
代码分析:
await会让async函数暂时停止执行,等到await后面的表达式处理完成后,async就会继续执行了。(await后面的表达式没有限制的)
async-await本质不是同步,只是让我们可以使用同步的逻辑去思考代码。
看到这里,对上面讲解的应该都理解了,我们在平时开发中,多点使用,正所谓活学活用,就是这个道理。
二、Babel
Babel说白了就是一个js编译器,可以把ES6的代码转成浏览器支持的ES5。有了Babel我们使用ES6就没有后顾之忧了。
目前主流的框架基本都把Babel封装使用了,不再需要我们自己一步一步去安装了,开箱即用。但是我们还是应该了解一下的:
下面讲讲,如何搭建Babel:
1、本地安装 Babel CLI:
npm install --save-dev babel-cli
安装完成后应该再package.json的devDependencies看到类似下面的(版本不一定是这个)
"babel-cli": "^6.0.0"
2、使用:
在package.json"scripts"
属性并将 babel 命令放在它的 build
属性中
"scripts": { "build": "babel src -d lib" },
接下来我们就可以使用期待已久的npm run build了。
最后要让babel生效,还需要创建 .babelrc
文件、引入一些插件(例如preset )
安装插件
npm install babel-preset-env --save-dev
定义.babelrc文件,让preset生效
{ "presets": ["env"] }
来个例子让大家知道babel做了什么:
// 转码前 _filter (add, name, code) { let result = [] for (let i = 0; i < add.length; i++) { if (code == add[i].RNUM) { result = add[i][name] } } return result } // 转码后 _filter: function (e, t, n) { for(var i=[],a=0; a<e.length; a++) n == e[a].RNUM && (i = e[a][t]); return i }
讲到这里相信大家对Babel也有了大概的概念了,如果要深入学习Babel可以到官方文档进行深入学习。