关于Promise对象的代码题及思路分析

 代码题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函数时传入的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值