美文网首页
Promise、Generator 函数

Promise、Generator 函数

作者: 飞鱼Q | 来源:发表于2017-01-07 19:46 被阅读0次
Promise对象是一个构造函数,用来生成Promise实例
var promise = new Promise((resolve, reject) => {
// 异步操作,如调个api
      if (/* 异步操作成功 */){
        resolve(value);
    } else {
        reject(error);
     }
})

resolve函数改变promise状态从Pending(未完成)变为Resolved
reject函数从Pending变为Rejected

promise实例的then方法

作用: 指定Resolved状态和Reject状态的回调函数

promise.then(function(value) {
  // success
}, function(error) {
  // failure
});
Generator函数

协程的方式解决异步问题

第一步,协程A开始执行。
第二步,协程A执行到一半,进入暂停,执行权转移到协程B。
第三步,(一段时间后)协程B交还执行权。
第四步,协程A恢复执行。

上面流程的协程A,就是异步任务,因为它分成两段(或多段)执行。
Generator函数最大特点就是可以交出函数的执行权(即暂停执行)
它不是一个普通的函数,函数名之前要加星号如

function*  gen(x){
    var y = yield x + 2;
    return y
}

Generator函数的执行

var g = get(1);
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }
  1. 第一个next()方法,返回 x+2

yield语句本身没有返回值,或者说返回的是undefined
所以些时y是undefined

  1. 第二个next()方法,返回return后面的值y,所以它是undefined

每次调用next方法时指针从函数头部或上一次停下来的地方开始执行,直到遇到下一个yield语句(或return语句)为止

next 方法
  1. 遇到yield这个关键词时,就将跟在它后面的表达式的值,作为返回对象的value的值

  2. 下一次调用next方法时,再继续往下执行,直到遇到下一个yield语句。

  3. 如果没有再遇到新的yield语句,就一直运行到函数结束,直到return语句为止,并将return语句后面的表达式的值,作为返回的对象的value属性值。

  4. 如果该函数没有return语句,则返回的对象的value属性值为undefined。

正常函数只能返回一个值,因为只能执行一次return;Generator函数可以返回一系列的值,因为可以有任意多个yield。从另一个角度看,也可以说Generator生成了一系列的值,这也就是它的名称的来历(在英语中,generator这个词是“生成器”的意思)。

next 方法的参数

yield句本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield语句的返回值
所以如果第一个next()方法我们加一个5的参数

g.next(5) // {value: 5, done: true}

这里第一个yield会把5给y,我们第二个再获取时,y就已经是5了

因为返回的是第一个yield的返回值,所以第一个next()方法是不能带参数的。

for of循环
function* gen() {
    yield 1;
    yield 2;
    yield 3;
    yield 4;
    yield 5;
    return 6
}

for(let i of gen()){
    console.log(i)
}

// 1,2,3,4,5

for of可以遍历generator函数,不需要调next,但是需要注意的是一旦next返回的done为true,它就停止了,并且连done为true的这个对象也不返回了

g.return() 方法

g.return('hello') 当碰到这个时返回的对象是{value:'hello', done: true}
表示已经对遍历的终止

相关文章

  • Generator

    异步编程解决方案 Generator 函数、Promise 、回调函数、事件 Generator 函数有多种理解角...

  • 思维导图整理6种JS异步编程演变

    记录总结Promise对象 记录总结Generator函数和async函数

  • Promise/generator/async与await

    promise generator 函数 (生成器函数); 普通函数function show(){} 生成器函数...

  • async await 的实现原理

    generator + yield + promise 利用generator遍历器生成器函数的分段执行 ,只有在...

  • Async/Await 函数用法

    JavaScript编程异步操作解决方案:回调函数 => Promise对象 => Generator函数 => ...

  • async/await 原理及简单实现

    解决函数回调经历了几个阶段, Promise 对象, Generator 函数到async函数。async函数目...

  • es6--函数新增

    函数的扩展 函数参数设置默认值...rest参数箭头函数Promise函数Generator 函数async函数 ...

  • Promise、Generator 函数

    Promise对象是一个构造函数,用来生成Promise实例 resolve函数改变promise状态从Pendi...

  • async/await 原理及简单实现

    解决函数回调经历了几个阶段, Promise 对象, Generator 函数到async函数。async函数目前...

  • ES6

    let const 数组的解构赋值 ---扩展 for - of循环 Promise对象 Generator函数

网友评论

      本文标题:Promise、Generator 函数

      本文链接:https://www.haomeiwen.com/subject/ofwfbttx.html