异步编程有哪些?
- fs文件操作
require('fs').readFile('./index.html',(err,data)=>{}) - 数据库操作
- AJAX
$.get('/server',(data)=>{}) - 定时器
setTimeOut(()=>{},2000)
...
一.理解
1.抽象表达:
(1)Promise是JS中进行异步编程的新解决方案(旧解决方案是单纯使用回调函数)。
2.具体表达:
(1)从语法上来说:Promise是一个构造函数。
(2)从功能上来说:Promise对象用来封装一个异步操作并可以获取其成功/失败的结果值。
二.为什么要用Promise
1.指定回调函数的方式更加灵活
(1)旧的必须在启动异步任务前指定
(2)Promise:启动异步任务=>返回promise对象=>给promise对象绑定回调函数(甚至可以在异步任务结束后指定/多个)
2.支持链式调用,可以解决回调地狱问题
(1)什么是回调地狱?
回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调执行的条件。
(2)回调地狱的缺点?
不便于阅读,不便于异常处理
(3)解决方案?
Promise链式调用
三.Promise的状态改变
1.pending变为fulfilled
2.pending变为rejected
说明:状态不可逆转,只有这两种,且一个Promise对象只能改变一次,无论成功或失败,只有一个结果数据。成功的数据一般称为value,失败的数据一般称为reason。