ES6---generator函数及异步的应用

本文介绍了Generator函数在JavaScript中的应用,它作为异步编程的一种解决方案,允许程序员手动管理执行流程。Generator函数在协程中扮演关键角色,提供了轻量级的线程操作,避免了线程切换的开销。通过示例展示了如何使用Generator处理异步任务,如网络请求,并演示了错误处理和数据交换的机制。
摘要由CSDN通过智能技术生成

generator函数及其异步的应用

以前windows的线程切换是非抢夺式的,也就是说我要让进程主动让出执行权,如果有一个进程中一个操作卡死,那么会一直等待结果,于是乎不会让出操作权.
在windows95开始就是抢夺式,也就是现在的方式,通过切换时间片,

多核cpu
协程
协程是一种基于线程之上,但又比线程更加轻量级的存在,这种由程序员自己来管理的轻量级线程叫做【用户空间线程】,具体对内核来说不可见的特性。
如果被内核知道会被注册成线程,就会变回抢夺式,因为不可见,所以他切换是千变万化,但是协程的执行权切换,只会用户明确了放弃执行权

正如一个进程可以拥有多个线程,那么多个线程也有多个协程

什么是generator

Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。本章详细介绍 Generator 函数的语法和 API
Generator 函数的语法
具体查看ES6文档

协程的generator函数实现

function*gen(x){
    var y = yeild x + 2;
    //yeild 是generator中的一个方法
    // yeild 区分指针区域的地方,分阶段用的  
    return y;
    
}
var g = gen(1);
//这里是内部指针赋值给g;
g.next()//{value:3,done:false}
//这里表示我们的指针指到第一个位置,然后返回值得到3,没有结束,所以false
g.next()//{value:undefined,done:ture}

//因为上面那一部分没有传值,所以是不存在。

因为第一个next是第一次操作,他没有上一步,所以说不用传参,如果说下一步,就要传参,他会是上一个阶段的返回值,在到这一步中
该函数是一个完整的闭环,可以进行数据交换

错误交换

function *gen(x){

    try{
        var y = yeild x + 2;
    }catch(e){
        console.log(e)
    }
}
var g = gen(1);
g.next();
g.throw('error');

可以让报错和错误位置分开,

异步任务的封装

var fetch = require('node-fetch');
function*gen(){
var url = 'https://api.github.com/users/github';
var result = yield fetch(url);
//这里看是不是想同步代码
console.log(esult.bio);
}

执行

var g = gen();
//获取指针
var result = g.next();
//指针改到第一个位置,然后执行异步操作

result.value.then(function(data){
// 找到value,调用了then的方法,就相当于我成功了之后调用了这个回调;
    return data.json();
    
}).then(function(data){
//再获取数据,然后返回到gen()函数里
    g.next(data)
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值