【第12周 Promise 3-1 then( )方法】关于Promise中参数resolve和reject的问题
问题描述:
Q1:图1中, 因为p里面调用的是reject,所以后面的所有函数都在p.then的第二个回调函数中进行。p.then的第一个回调函数不执行。是这样吗?
Q2:图2中,return undefined是默认执行的吗?即要传成功,什么都不写的话。系统会默认执行return undefined?
Q3:图2中,默认情况下调用resolve,可以省略reject参数;那Promise调用reject()的时候,可以省略resolve参数吗?即Promise(reject => reject(););
Q4:图3中,如果p.then()中没有返回值,p.then().then()中,执行第一个回调,不执行第二个回调函数,是否是按顺序执行的原因?
麻烦老师指导下
相关截图:
图1:
图2:
图3:
相关代码:
//3. then方法返回的Promise对象的状态改变 const p = new Promise((resolve,reject)=>{ //resolve(); reject(); }); p.then( //第一次then:上面是reject(),所以执行第二个回调函数,才能将后面的then执行 ()=>{ console.log('success1'); }, ()=>{ console.log('error1'); //1)传成功 return undefined; //在then的回调函数中,return后面的东西,会用Promise包装一下 //return undefined 等价于: return new Promise((resolve,reject)=>{ resolve(undefined); //默认情况下Promise调用resolve方法 }); return 123; //输出 success 123 //等价于: return new Promise(resolve => { resolve(123); }); //2)传失败 return不简写,写完整的就行 return new Promise(resolve,reject => { reject('reason'); //最后输出 err2 reason }); }).then( //第2次then:这里的then由p.then决定,不由p决定 (data)=>{ console.log('success2',data); //下面的then按顺序执行这里的回调 return undefined; //等价于: return new Promise(resolve => { resolve(undefined); }); }, (err)=>{ console.log('error2',err); } ).then( //第3次then:由第2次then返回的值决定,和第一次then无关 (data)=>{ console.log('success3',data); //success3,undefined }, (err)=>{ console.log('error3',err); } );
//3. then方法返回的Promise对象的状态改变
const p = new Promise((resolve,reject)=>{
//resolve();
reject();
});
p.then( //第一次then:上面是reject(),所以执行第二个回调函数,才能将后面的then执行
()=>{
console.log('success1');
},
()=>{
console.log('error1');
//1)传成功
return undefined;
//在then的回调函数中,return后面的东西,会用Promise包装一下
//return undefined 等价于:
return new Promise((resolve,reject)=>{
resolve(undefined); //默认情况下Promise调用resolve方法
});
return 123; //输出 success 123
//等价于:
return new Promise(resolve => {
resolve(123);
});
//2)传失败 return不简写,写完整的就行
return new Promise(resolve,reject => {
reject('reason'); //最后输出 err2 reason
});
}).then( //第2次then:这里的then由p.then决定,不由p决定
(data)=>{
console.log('success2',data); //下面的then按顺序执行这里的回调
return undefined;
//等价于:
return new Promise(resolve => {
resolve(undefined);
});
},
(err)=>{
console.log('error2',err);
}
).then( //第3次then:由第2次then返回的值决定,和第一次then无关
(data)=>{
console.log('success3',data); //success3,undefined
},
(err)=>{
console.log('error3',err);
}
);
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星