You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
letasync=function(callback){try{setTimeout(function(){callback();},1000)}catch(e){console.log('捕获错误',e);}}async(function(){console.log(t);// Uncaught ReferenceError: t is not defined});
Async
1. 异步
这种不连续的执行,就叫做异步。相应地,连续的执行,就叫做同步。
2. 高阶函数
函数作为一等公民,可以作为参数和返回值
2.1 可以用于批量生成函数
如:
let isArray = isType('Array')
-> 用返回一个函数的姿势来批量生成函数2.2 可以用于需要调用多次才执行的函数
3. 异步编程的语法目标,就是怎样让它更像同步编程,有以下几种
4. 回调
所谓回调函数,就是把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数
这是一个错误优先的回调函数 (error-first callbacks), 这也是 Node.js 本身的特点之一。
➹:「每日一题」Callback(回调)是什么? - 知乎
5. 回调的问题
5.1 异常处理
异步代码时
try catch
不再生效因为这个回调函数被存放了起来,直到下一个事件环的时候才会取出,try 只能捕获当前循环内的异常,对 callback 异步无能为力。
Node 在处理异常有一个约定,将异常作为回调的第一个实参传回,如果为空表示没有出错。
异步方法也要遵循两个原则
必须在异步之后调用传入的回调函数
如果出错了要向回调函数传入异常供调用者判断
5.2 回调地狱
异步多级依赖的情况下嵌套非常深,代码难以阅读的维护
6. 异步流程解决方案
6.1 事件发布/订阅模型
订阅事件实现了一个事件与多个回调函数的关联
6.2 哨兵变量
6.3 Promise/Deferred 模式
promise/deferred 模式是,根据 promise/A 或者它的增强修改版 promise/A+ 规范 实现的 promise 异步操作的一种实现方式。
promise/deferred 模式包含两部分:Promise 和 Deferred。
then()
方法,暴露给外部调用,以添加业务逻辑和业务的组装。promise 和 deferred 的关系图:
从图中可以看到:
➹:promise/deferred 模式原理分析和实现 - SegmentFault 思否
6.4 生成器 Generators/ yield
next
方法)。也就是说,你调用生成器函数,它会返回给你一个迭代器。迭代器会遍历每个中断点。next
方法返回值的value
属性,是 Generator 函数向外输出数据;next
方法还可以接受参数,这是向 Generator 函数体内输入数据6.4.1 生成器的使用
6.4.2 Co
co
是一个为Node.js
和浏览器打造的基于生成器的流程控制工具,借助于 Promise,你可以使用更加优雅的方式编写非阻塞代码。6.5 Async/ await
使用
async
关键字,你可以轻松地达成之前使用生成器和 co 函数所做到的工作6.5.1 Async 的优点
6.5.2 async 函数的实现
参考:
The text was updated successfully, but these errors were encountered: