代码题1
function do1() {
console.log("任务1");
}
function do2() {
console.log("任务2");
}
function do3() {
console.log("任务3");
}
function do4() {
console.log("任务4");
}
var p = new Promise((resolve,reject)=>{ resolve()})
p.then(do1)
.then(do2)
.then(do3)
.then(do4);
打印结果:任务1,任务2,任务3,任务4
分析:
p是一个promise对象并且调用了resolve方法,状态为resolved肯定会走then,所以肯定会输出‘任务1’;
p.then(do1)的返回值不是一个promise对象,那它的状态肯定是resolved,然后会输出‘任务2’,后面两个的状态也是resolved,也都会输出。
代码题2
function do1() {
console.log("任务1");
}
function do2() {
console.log("任务2");
}
function do3() {
console.log("任务3");
}
function do4() {
console.log("任务4");
}
var p = new Promise((resolve,reject)=>{ resolve()})
p.then(do1)
.then(do2)
.catch(do3)
.then(do4);
打印结果:任务1, 任务2, 任务4
分析:
p是一个promise对象并且调用了resolve方法,状态为resolved肯定会走then,所以肯定会输出‘任务1’;
p.then(do1)的返回值不是一个promise对象,那它的状态是resolved,然后会输出‘任务2’;
p.then(do1).then(do2)的返回值不是一个promise对象,那它的状态是resolved,不会走catch这步,所以‘任务3’不会输出,直接输出‘任务4’.
代码题3
function do1() {
console.log("任务1");
console.log(abc); //故意犯错
}
function do2() {
console.log("任务2");
}
function do3() {
console.log("任务3");
}
function do4() {
console.log("任务4");
}
var p = new Promise((resolve,reject)=>{ resolve()})
p.then(do1)
.then(do2)
.then(do3)
.catch(do4);
打印结果:任务1, 任务4
分析:
p是一个promise对象并且调用了resolve方法,状态为resolved肯定会走then,所以肯定会输出‘任务1’;
然后do1()函数中,故意犯了错误,所以它的状态是rejected,那么就直接走catch这一步,然后会输出‘任务4’。
代码题4
function increment(value) {
return value + 1;
}
function doubleUp(value) {
return value * 2;
}
function output(value) {
console.log(value);
}
var p = Promise.resolve(1);
p.then(increment)
.then(doubleUp)
.then(output)
打印结果:4
分析:
首先p是promise对象,状态为resolved,会走then(increment)这一步,然后返回值为2,不是promise对象,状态也为resolved,继续走then(doubleUp),返回值为4,然后也不是promise对象,状态也为resolved,最后走then(output),输出4。
代码题5
//目标:是让sleep 的功能与setTimeout一样:就是等2000毫秒之后再执行后续操作。
function sleep(time){
// 请写出你的代码
return new Promise((resolve,reject)=>{
setTimeout(function(){
resolve()
},time)
})
}
sleep(2000).then(()=>{
console.log("后续操作")
})
console.log(2);
分析:首先我们调用sleep()方法,它的返回值一定要是promise对象,状态一定要是resolved才会走then中的函数,所以直接返回一个promise对象,并且题目要求2秒后再执行,所以就需要一个一次性定时器,时间就是调用sleep函数时传入的值。