- 异步编程的理解: 异步编程大致就是为处理javsacript异步任务的一些异步解决方法或将一些同步任务修改为异步任务执行。
- 事件循环机制(Event Loop)
- js执行过程中一个异步事件后并不会一直等待其返回结果,而是会将这个事件挂起,继续执行执行栈中的其他任务。当一个异步事件返回结果后,js会将这个事件加入与当前执行栈不同的另一消息队列。被放入消息队列不会立刻执行其回调,而是等待当前执行栈中的任务都执行完毕,主线程会去查找消息队列是否有任务。如果有,那么主线程会从中取出排在第一位的事件,并把这个事件对应的回调放入执行栈中,然后执行其中的同步代码…,如此反复,这样就形成了一个无限的循环,这就是Event Loop
- Generator
- 基本用法// 生成器函数回顾function * foo () { console.log(‘start’)try { const res = yield ‘foo’ console.log(res) } catch (e) { console.log(e) }}const generator = foo()const result = generator.next()console.log(result)// generator.next(‘bar’)generator.throw(new Error(‘Generator error’))
- async/await
- 基本用法和Generator 相同,只是书写语法差异
- Promise
- Promise 的链式调用(解决回调地狱)
- 示例ajax(‘/api/users.json’) .then(function (value) { console.log(1111) return ajax(‘/api/urls.json’) }) // => Promise .then(function (value) { console.log(2222) console.log(value) return ajax(‘/api/urls.json’) }) // => Promise .then(function (value) { console.log(3333) return ajax(‘/api/urls.json’) }) // => Promise .catch(function (error) { console.log(error) })
- promise 对象的then方法会返回一个全新的promise对象
- 后面的then方法就是在为上一个点then方法返回的promise注册回调
- 前面的then方法中回调函数的返回值会作为后面then方法的回调参数
- 如果回调中返回的是promise,那么后面then方法的回调会等待它的结束
- 在链式调用过程中出现错误,catch可以捕获错误。catch是给上一个then方法注册的回调,在链式调用中出现错误,错误对象会一级一级往下传递直至被catch捕获,所以catch可以捕获前面的then方法的错误
- 示例ajax(‘/api/users.json’) .then(function (value) { console.log(1111) return ajax(‘/api/urls.json’) }) // => Promise .then(function (value) { console.log(2222) console.log(value) return ajax(‘/api/urls.json’) }) // => Promise .then(function (value) { console.log(3333) return ajax(‘/api/urls.json’) }) // => Promise .catch(function (error) { console.log(error) })
- promise 的使用
- promise.resolve / promise.reject
- 可以快速创建一个成功/失败的promise对象,可将一些普通对象转换为promise对象
- promise.all 、promise.race
- all:并行执行多个promise方法,等待所有传入的promise对象执行完成all才执行完成
race:传入多个promise对象,其中一个执行完成rece就执行完成
- all:并行执行多个promise方法,等待所有传入的promise对象执行完成all才执行完成
- promise.all 和 promise.race 的区别
- all 方法会等待所有传入的promise执行完成并成功all方法才算成功执行完成,rece 方法只会等待一个promise执行完成
- promise.resolve / promise.reject
- promise 深入了解
- promise的异步执行时序
- 目前大部分异步任务都是作为宏任务执行的,而promise是以微任务执行的
- 什么是宏任务?参考博客:https://www.jianshu.com/p/bfc3e319a96b
- 目前大部分异步任务都是作为宏任务执行的,而promise是以微任务执行的
- promise的异步执行时序
- Promise 的链式调用(解决回调地狱)
