promise
1、什么是promise?
2、网络请求的回调地狱
3、Promise的基本使用1
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
//什么情况下会用到Promise?
// 一般情况下是有异步操作时,使用Promise对这个异步操作进行封装
// new ->构造函数(1、保存了一些状态信息 2、执行传入的函数)
// 在执行传入的回调函数时,会传入两个参数,resolve,reject,本身又是喊出
new Promise((resolve,reject) => {
setTimeout(() => {
// 成功的时候调用resolve
resolve('Hello World')
// 失败的时候调用reject
// reject('err message')
}, 1000)
}).then((data)=>{
console.log(data);
console.log(data);
console.log(data);
console.log(data);
console.log(data);
}).catch((err)=>{
console.log(err);
console.log(err);
console.log(err);
console.log(err);
console.log(err);
})
</script>
</body>
</html>
4、Promise的三种状态
5、Promise的基本使用2
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<script>
new Promise((resolve,reject)=>{
// resolve('Hello world');
reject('hello vue');
}).then(data =>{
console.log(data);
},err=>{
console.log(err);
})
</script>
</body>
</html>
6、Promise的链式调用
6.1、Promise的链式调用一
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<script>
// 参数 -> 函数(resolve,reject)
// resolve,reject本身又是函数
// 链式编程
new Promise((resolve,reject)=>{
// 第一次网络请求
setTimeout(() => {
resolve()
}, 1000)
}).then(()=>{
// 第一次拿到结果处理的代码
console.log('Hello world');
console.log('Hello world');
console.log('Hello world');
console.log('Hello world');
console.log('Hello world');
return new Promise((resolve,reject)=>{
// 第二次网络请求的代码
setTimeout(() => {
resolve()
}, 1000);
})
}).then(()=>{
// 第二次拿到结果处理的代码
console.log('Hello vue');
console.log('Hello vue');
console.log('Hello vue');
console.log('Hello vue');
console.log('Hello vue');
return new Promise((resolve,reject)=>{
// 第三次网络请求的代码
setTimeout(()=>{
resolve()
},1000)
})
}).then(()=>{
// 第三次拿到结果处理的代码
console.log('Hello python');
console.log('Hello python');
console.log('Hello python');
console.log('Hello python');
console.log('Hello python');
})
</script>
</body>
</html>
6.2、Promise的链式调用二(简写方式)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<script>
// 网路请求:aaa -> 自己处理(10行)
// 处理:aaa111 -> 自己处理(10行)
// 处理:aaa111222 -> 自己处理
//1、写法一:Promise((resolve,reject)=>{})
// new Promise((resolve,reject)=>{
// setTimeout(()=>{
// resolve('aaa');
// },1000)
// }).then(res=>{
// // 1、自己处理10行代码
// console.log(res,'第一层的10行处理代码');
// // 2、对结果进行第一次处理
// return new Promise((resolve,reject)=>{
// resolve(res + '111')
// })
// }).then(res=>{
// console.log(res,'第二层的10行代码处理');
// return new Promise(resolve=>{
// resolve(res + '222')
// })
// }).then(res=>{
// console.log(res,'第三层的10行处理代码')
// })
// 2、new Promise(resolve => resolve(结果))简写
// new Promise((resolve,reject)=>{
// setTimeout(()=>{
// resolve('aaa');
// },1000)
// }).then(res=>{
// // 1、自己处理10行代码
// console.log(res,'第一层的10行处理代码');
// // 2、对结果进行第一次处理
// return Promise.resolve(res + '111')
// }).then(res=>{
// console.log(res,'第二层的10行代码处理');
// return Promise.resolve(res+222)
// }).then(res=>{
// console.log(res,'第三层的10行处理代码')
// })
// 3、省略掉Promise.resolve
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('aaa')
}, 1000)
}).then(res => {
// 1.自己处理10行代码
console.log(res, '第一层的10行处理代码');
// 2.对结果进行第一次处理
return res + '111'
}).then(res => {
console.log(res, '第二层的10行处理代码');
return res + '222'
}).then(res => {
console.log(res, '第三层的10行处理代码');
})
</script>
</body>
</html>
6.3、Promise的链式调用处理异常的两种写法
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<script>
// 4、网络异常时的处理
new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('aaa');
},1000)
}).then(res=>{
// 1、自己处理10行代码
console.log(res,'第一层的10行处理代码');
// 2、对异常结果进行处理(方式一)
return Promise.reject('err message')
// 对异常结果进行处理(方式二)
throw 'err message'
}).then(res=>{
console.log(res,'第二层的10行代码处理');
return Promise.resolve(res + '222')
}).then(res=>{
console.log(res,'第三层的10行处理代码')
}).catch(err=>{
console.log(err);
})
</script>
</body>
</html>
7、Promise的all方法的使用
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<script>
Promise.all([
new Promise((resolve,reject)=>{
setTimeout(() => {
resolve({name:'why',age:18})
}, 1000);
}),
new Promise((resolve,reject)=>{
setTimeout(() => {
resolve({name:'kobe',age:42})
}, 1000);
})
]).then(results=>{
console.log(results);
})
</script>
</body>
</html>