es6 语法入门

Promise 对象

1. 基础讲解

作为一个容器,用于存储未来要发生的事情,其状态分别为pendingresolved,rejected

缺点:基本在于如果他执行了,那么无法中途取消,如果没有设置回调,则没有返回结果,也没有错误说明。

理解
1. 一个异步需要很长时间执行时,对于promise 函数执行的方法是没有办法终止的。
2. 需要设置回调,无法得到返回或错误。(没有回调写个毛线啊!!)

2. 基本用法

    var promise = new Promise(
       function(resolve,reject){
            if(/*执行成功*/){
                resolve(value);
            }else{
                reject(value);
            }
       }
    );

说明
1. 在异步执行完成后,通过resolve(value)或者reject(value)可以将在异步中获取到值value 传递出去。交给promise.then()方法进行调用。
2. 同时then()方法中return new_value处理后的值实现值的再传递。


那么,在then 方法中又出现异步的时候,是怎么样的情况呢?针对的是内外都是promise 函数

var p1 = new Promise((resolve,reject)=>{
   setTimeout()=>{ 
       reject(new Error('fail')),3000)
   }
});
var p2 = new Promise(function (resolve, reject) {
  setTimeout(() => resolve(p1), 1000)
})

p2.then(result => console.log(result))
  .catch(error => console.log(error))
// Error: fail

说明:
1. p2执行调用了p1,这个时候,p1的状态交给了p2。
2. 只有在p1的执行完成后,也就是被resolve或者reject之后,才会执行p2的回调。

关键方法

说明:

  1. then():then()完整的方式是2个参数,分别为resolve的后来执行,以及reject的后面执行。
  2. all():参数是一组promise,当都完成后,才会执行回调。
  3. catch():将then()函数的方法单独出来作为一个请求。用于全局的异常错误处理。通过reject(err)的作用等同于抛出错误
  4. race():竞争上岗。
  5. Promise.resolve(): 等同new Promise(resolve=>resolve(foo)),thenable也就是一个返回有一个then属性的对象
  6. 如果resolve()函数的方法没有参数,也就是在异步之后执行。也就是在本次执行完成时候。
setTimeout(function () {
  console.log('three');
}, 0);

Promise.resolve().then(function () {
  console.log('two');
});

console.log('one');

// one
// two
// three
  1. done():用于处理异常,捕捉错误,向着全局抛出。就是是done之后的异常是会被执行器捕获到。
  2. finally():最后都会执行的方法。

Generator函数

概念

个人的见解:
类似一个stack,由于存放各类的处理的语言,可以是异步,也可能是同步,在执行next()的方法的时候,跳转到下一个语句。

用法

function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}
var hw = helloWorldGenerator();
//执行
hw.next()
// { value: 'hello', done: false }

hw.next()
// { value: 'world', done: false }

hw.next()
// { value: 'ending', done: true }

hw.next()
// { value: undefined, done: true }

说明:如何使用generator()函数
1. thunk思想
2. co小工具

var gen = function* () {
    var f1 = yield readFile('/etc/fstab');
    var f2 = yield readFile('/etc/shells');
    console.log(f1.toString());
    console.log(f2.toString());
};
var co = require('co');
co(gen);
co(gen).then(function (){
    console.log('Generator 函数执行完成');   
});

注意:yeild 后面接的是promise()的对象。


async

是对generator函数的升级改造
javascript
var asyncReadFile = async function () {
var f1 = await readFile('/etc/fstab');
var f2 = await readFile('/etc/shells');
console.log(f1.toString());
console.log(f2.toString());
};


字符串模版

`` 包裹的字符串,同时${}来包裹变量

posted @ 2017-03-22 10:47  zcooool  阅读(128)  评论(0编辑  收藏  举报