zoukankan      html  css  js  c++  java
  • Generator(生成器)

    序言

     
    generator(生成器)是ES6引入的一种新的标准,可以用于处理异步请求,将异步回调的方式已同步的方式展示。generator和函数不同的是,generator由function*定义(注意多出的*号),并且,除了return语句,还可以用yield返回多次。
     

    关于Generator的斐波那契数列

     
    function fit(max) {
    var a=0,
    b=1,
    arr=[0,1];
    while( arr.length < max ){
    [a,b]=[b,a+b];
    arr.push(b);
    }
    return arr;
    } 
    当我们调用fit时,会将所有的结果输出,如果我们想要了解斐波那契数列产生的每一步结果呢?那就需要我们使用generator。
    function* fib(max) {
        var
            t,
            a = 0,
            b = 1,
            n = 0;
        while (n < max) {
            yield a;
            [a, b] = [b, a + b];
            n ++;
        }
        return;
    }

    Generator在AJAX中的运用

     
    原始的AJAX异步请求需要我们去层层嵌套
    ajax('http://...', data1, function (err, result) {
        if (err) {
            return handle(err);
        }
        ajax('http://...', data2, function (err, result) {
            if (err) {
                return handle(err);
            }
            ajax('http://...', data3, function (err, result) {
                if (err) {
                    return handle(err);
                }
                return success(result);
            });
        });
    });
    当我们使用Generator去处理AJAX请求时,我们的语法变得多么优雅,简洁:
    try {
        r1 = yield ajax('http://...', data1);
        r2 = yield ajax('http://...', data2);
        r3 = yield ajax('http://...', data3);
        success(r3);
    }
    catch (err) {
        handle(err);
    }

    Generator在闭包中的运用

     
    闭包实现方式全局变量current_id 保存记数.
    var current_id = 0;
    function next_id() {
    current_id ++;
    return current_id;
    }
    generator实现计数功能:
    function* next_id(){
     var time=0;
       while(true){
         time+=1;
         yield time;
    }
    

      

  • 相关阅读:
    thinkphp目录解析
    开发规范
    form
    命名空间
    类与对象
    OS知识点汇总
    C++每日一记!
    语言哲学和语言逻辑
    形式语言与自动机
    C#脚本
  • 原文地址:https://www.cnblogs.com/fuGuy/p/9208491.html
Copyright © 2011-2022 走看看