【第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 星