ES6学习笔记(七)--Generator函数与Promise对象

原创 2016年06月01日 17:18:47

Generator函数

执行Generator函数会返回一个遍历器对象,也就是说,Generator函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历Generator函数内部的每一个状态。

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 }

Promise对象

Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果

基本用法

//promise实例
var promise = new Promise(function(resolve, reject) {//两个参数方法浏览器实现
  // ... some code

  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

promise.then(function(value) {//resolve时调用
  // success
}, function(error) {//reject时调用
  // failure
}).catch(function(error) {
  // 处理 promise 和 then回调函数运行时发生的错误
  console.log('发生错误!', error);
});

Promise.all()

var p = Promise.all([p1, p2, p3]);
//p1、p2、p3都是Promise对象的实例,如果不是,就会先调用Promise.resolve方法
//将参数转为Promise实例,再进一步处理

p的状态由p1、p2、p3决定,分成两种情况
1. 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数
2. 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数

// 生成一个Promise对象的数组
var promises = [2, 3, 5, 7, 11, 13].map(function (id) {
  return getJSON("/post/" + id + ".json");
});

Promise.all(promises).then(function (posts) {
  // ...
}).catch(function(reason){
  // ...
});

Promise.race()

var p = Promise.race([p1, p2, p3]);
//p1、p2、p3都是Promise对象的实例,如果不是,就会先调用Promise.resolve方法
//将参数转为Promise实例,再进一步处理

只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的回调函数

版权声明:本文为博主原创文章,转载请注明出处。

对Promise的一些理解

摘取部分脚本之家的描述: Promise核心说明 尽管Promise已经有自己的规范,但目前的各类Promise库,在Promise的实现细节上是有差异的,部分API甚至在意义上完全不同。但Prom...
  • ztop_f
  • ztop_f
  • 2016年06月16日 15:24
  • 1635

关于ES6的Promise的使用深入理解

ES6的promise对象研究 什么叫promise?      Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码;让代码更加的直观。 那...
  • baidu_34449164
  • baidu_34449164
  • 2017年04月11日 17:06
  • 5926

ES6中promise对象——告别回调的嵌套

在JavaScript语言中,无论是写浏览器端的各种事件处理回调、ajax回调,还是写Node.js上的业务逻辑,不得不面对的问题就是各种回调函数。回调函数少了还好,一旦多了起来而且必须讲究执行顺序的...
  • hpu_shine
  • hpu_shine
  • 2016年11月25日 20:07
  • 1573

通过一道笔试题浅谈javascript中的promise对象

因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象。现在借这道题来分享下一些很基础的知识点。 下面是一个面试题目,三个promise对象捕获错误的例子,...
  • three_bird
  • three_bird
  • 2016年05月09日 09:41
  • 2531

利用generator(thunk化函数/promise方法)处理回调地狱的问题

在Nodejs中是通过回调函数控制异步过程的,但是当多个事件之间相互依赖,或多个事件一起协作时,就会导致函数嵌套过深的情况。如下是一个在项目中显示文章详情页的的代码,我们看到这个函数嵌套了七八层。这样...
  • charlene0824
  • charlene0824
  • 2016年07月19日 14:01
  • 1193

JS中的回调函数,以及ES6中通过promise处理回调

简要介绍:ES6中,可以通过promise来处理回调函数,回调函数经常用于异步操作中,间接来说,可以通过promise优化异步操作。1.什么是JS中的回调函数?回调函数是作为参数传递给另外一个函数,并...
  • liwusen
  • liwusen
  • 2017年01月06日 21:16
  • 4586

大白话讲解Promise(二)理解Promise规范

转载自:http://www.cnblogs.com/lvdabao/ 上一篇我们讲解了ES6中Promise的用法,但是知道了用法还远远不够,作为一名专业的前端工程师,还必须通晓原...
  • aaa333qwe
  • aaa333qwe
  • 2017年07月24日 10:29
  • 385

【javascript笔记】Promise对象

最初的异步流程控制,是通过回调来实现,但是存在回调太多层就会让人崩溃后来出现了,异步解决方案 async 可以应用到NodeJS 和 browser里面。后来ES6 将 promise 引入标准, ...
  • a5534789
  • a5534789
  • 2017年02月11日 18:18
  • 680

关于ES6的Promise的使用深入理解

ES6的promise对象研究 什么叫promise?      Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码;让代码更加的直观。 那...
  • baidu_34449164
  • baidu_34449164
  • 2017年04月11日 17:06
  • 5926

Promise对象的基本使用

promise对象用于将node.js中的异步函数串行执行,串行执行的情况可以分为以下两种情况:串联使用then方法,每次返回promise对象或其他参数。let startTime = Date.n...
  • koastal
  • koastal
  • 2017年05月12日 17:34
  • 1083
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ES6学习笔记(七)--Generator函数与Promise对象
举报原因:
原因补充:

(最多只允许输入30个字)