什么是promise
1.promise是一门新技术(ES6规范)
2.promise是js进行异步编程时的新方案
为什么是新方案?
旧方案;都是回调函数
3.从语法上说 promise是一个构造函数
4.从功能上说promise对象用来封装一个异步编程并可以获取成活或者失败的结果值
异步编程
包括但不限于以下几种
1.fs (nodejs下面的一个模块,可以对磁盘下面的文件进行读取操作) 文件操作
require('./index.html',(err,data)=>{}) 回调函数
2.数据库操作 (对mysql等数据库进行操作也是异步操作)
3.ajax
$.get('/xxx/xxxApi',params,(data)=>{})
//'/xxx/xxxApi'是请求路径
//params 是请求参数 传参
//(data)=>{} 是回调函数
4.setTimeout
setTimeout(()=>{},2000) 同样是回调函数
为什么要使用promise
1.可以链式调用,解决回调地狱的问题
什么是回调地狱?回调函数里面又套回调函数
p1(opt,(params1)=>{
p2(opt,(params2)=>{
p3(opt,(params3)=>{
p4(opt,(params4)=>{
......
})
})
})
})
这样还要每一个单独处理错误操作的代码,导致代码重复
------------------------------------------
//使用promise改造之后
// 用 Promise 链式调用,替代嵌套回调
p1(opt) // 第 1 步:执行 p1
.then((params1) => { // params1 是 p1 resolve 的结果
return p2(opt, params1); // 执行 p2,返回它的 Promise
})
.then((params2) => { // params2 是 p2 resolve 的结果
return p3(opt, params2); // 执行 p3,返回它的 Promise
})
.then((params3) => { // params3 是 p3 resolve 的结果
return p4(opt, params3); // 执行 p4,返回它的 Promise
})
.then((params4) => { // params4 是 p4 resolve 的结果
console.log('最终结果:', params4); // 所有步骤完成
})
.catch((err) => { // 任何一步出错,都会跳到这里
console.error('出错了:', err);
});
2.更为灵活的调用回调函数
之前:要在启动异步函数之前调用回调函数
现在:先启动异步函数=>返回promise后=>在给promise绑定回调函数(也可以在异步任务结束后指定多个回调函数)