老师,有些是我自己添加的注释,是对then方法的理解,不知道对不对,请老师指教,谢谢
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>then方法</title>
</head>
<body>
<script>
// 1.什么时候执行
// ppending->fulfilled时,执行then的第一个回调函数
// ppending->rejected时,执行then的第二个回调函数
// // 2.执行后的返回值
// // then方法执行后返回一个新的Promise对象
// // 用的是回调函数,回调函数里面含有两个参数
// // resolve或reject调用决定p的状态
// const p=new Promise((resolve,reject)=>{
// resolve();
// });
// // 有了状态后,p调用then方法
// // 可以给p重新定义一个变量p2
// const p2=p.then(
// // 成功状态,调用第一个回调
// ()=>{},
// // 失败状态,调用第二个回调
// ()=>{}
// ).then().then();
// console.log(p,p2,p===p2) //Promise {<fulfilled>: undefined} Promise {<pending>} false
//3.then方法返回的Promise对象的状态改变
const p=new Promise((resolve,reject)=>{
// resolve();
reject();
});
// 有了状态后,p调用then方法
// 判断then方法中回调了哪个函数
// 第一个then是由p打点调用的;第二个then是const p2=p.then(),也就是p.then()返回新的调用对象p2调用的第二个then
//哪个状态执行了,就考虑是哪个调用并执行了
// 为改变第二个then调用的状态,可以在回调函数中加上return
p.then(
// 成功状态,调用第一个回调
()=>{
console.log('success');
},
// 失败状态,调用第二个回调
()=>{
console.log('err');
// 在then的回调函数中,return后面的东西,会用Promise包装一下
// return undefined;
// 等价于
// return new Promise((resolve,reject)=>{
// // 默认是resolve,所以可以省略reject的书写
// resolve(undefined);
// });
// 用return进行传入参数
// return 123;
// 等价于
// return new Promise(resolve=>{
// resolve(123);
// });
// 默认返回的永远都是成功状态的Promise对象
// 入股想要返回失败状态的Promise对象,可以自己重新写
return new Promise((resolve,reject)=>{
reject('reason')
})
}
).then(
(data)=>{
console.log('success2',data);
},
err=>{
console.log('err2',err);
}
).then(data=>{
console.log('success3',data);
// 返回参数
return undefined;
// 等价于
// return new Promise(resolve=>{
// resolve(undefined);
// })
},err=>{
console.log('err3',err)
});
// 总结:then()可以连续打点调用;then()内部的状态取向与返回参数是由打点的Promise对象决定的;
</script>
</body>
</html>7
收起
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星