17.0 generator函数的异步应用

ES6诞生以前,异步编程的方法大概有4中(1)回调函数(2)事件监听(3)发布/订阅(4)promise对象
1:JS语言对异步编程的实现就是回调函数;
2:node约定回调函数的第一个参数必须是err(如果没有错误,该参数就是null):执行分成2个阶段,第一段执行完毕之后,任务所在的上下文已经结束;再这以后抛出的错误,其原来的上下文环境已经无法捕捉;因此只能当做参数被传入第二阶段;
3:回调函数本身没有问题,他的问题出现在回调地狱;代码横向发展,很快就会乱做一团,无法管理;因为多个操作形成强耦合,只要有一个操作需要修改,他的上下文回调函数跟下层回调函数就要跟着修改;
4:
(1)promise对象就是为了解决这个问题而被提出来的,不是新的语法功能,而是一种新的写法;允许将回调函数的嵌套改写成链式调用;
(2)promise提供then方法加载回调函数;catch方法捕捉执行过程中抛出的错误;(3)promise只是回调函数的改进;使用then方法以后,异步任务的2段执行更清楚了;
(4)promise的最大问题是代码冗余,原来的任务被promise包装之后,无论什么操作,一眼看去都是许多then的堆积;原来的语义变得很不清楚;

var readFile = require('fs-readfile-promise')
readFile(fileA)
    .then(function (data) {
        console.log(data.toString())
    })
    .then(function () {
        return readFile(fileB)
    })
    .then(function (data) {
        console.log(data.toString())
    })
    .then(function () {
        return readFile(fileB)
    })
    .catch(function (err) {
        console.log(err)
    })

5:
(1)generator函数是协程在ES6中的实现,最大特点是可以交出函数的执行权;整个generator函数就是一个封装的异步任务的容器;异步操作需要暂停的地方用yield语句注明;
(2)generator函数执行以后返回一个指针(即遍历器);这个是generatot函数不同于普通函数的一个地方;调用next方法可以移动内部指针;指向遇到的第一个yield语句;
(3)虽然generator函数将异步操作表示的很简洁。但是流程管理缺不方便(即何时执行第一阶段,何时执行第二阶段)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值