promise面试题及返回值状态判断

一个面试常问的代码题

function increment(value) {
    return value + 1;
}
function doubleUp(value) {
    return value * 2;
}
function output(value) {
    console.log(value);// => (1 + 1) * 2
}
var p = Promise.resolve(1);
p.then(increment)
 .then(doubleUp)
 .then(output)

分析:

1.首先p的状态是resolve 值是1

2.因为p的状态是resolve 因此执行increment函数,increment的value值是1

返回值是2 因此increment的状态是resolve 所以继续执行doubleUp函数

3.以此类推,最终输出结果为4

面试常见的代码填空题

function sleep(time){
    // 请写出你的代码
}

sleep(2000).then(()=>{
    console.log("后续操作")
})
console.log(2);

效果:先执行输出等两秒后输出"后续操作"

分析:

        两秒后输出  需要用到定时器  只输出一次  因此使用setTimeout

        输出在then里面  因此sleep的状态需要是resolve

实现代码

function sleep(time){
	return new Promise(function(resolve,reject){
        // 异步操作,根据执行结果,决定是否调用 resolve,reject
        setTimeout(function(){
            resolve()
        }, time)
    })
}

promise返回值状态如何判断

function do1() {
    console.log("任务1");
}
function do2() {
    console.log("任务2");
}

var p = new Promise((resolve,reject)=>{ resolve()})
p.then(do1)
 .catch(do2)

var p1 = p.then(do1)
var p2 = p1.then(do2)

输出结果:任务1

第一步:由于p的状态是resolved,所以p.then(do1)中,do1函数会执行。输出任务1

     p1的状态由do1()来决定。因为do1并没有明确指定返回值,则返回值就是undefined. p1

               的状态就是resolved。

第二步:接下来看p2。由于p1的状态是resolved,所以它并不会执行do2, p2的状态没有变化,仍

                保持p1的状态:resolved。

总结

1.如果p1的状态是pending,则p2的状态也是pending

2.如果p1的状态是resolved,then()会去执行do2,则p2的状态由do2的返回值决定

2.1如果do2返回值不是promise对象,则p2的状态是resolved,且p2的promiseValue就是do2函数

     的return值

2.2如果do2返回值是一个promise对象,则p2的状态及promiseValue以这个promise对象为准

2.3如果f_ok这个函数内部发生了错误(或者是用户主动抛出错误),则p2的状态是rejected,且p2

    的promiseValue就是这个错误对象

rejected与resolved一致我就不多赘述了

如果以上看不太懂了话可以参考以下个人理解:

        若执行函数有return 则值为return返回的值

        若执行函数没有return  则值返回一个undefined

两种情况 该函数的状态都为resolved

那什么情况为rejected呢?

        若出现错误  或者该函数设定为rejected 状态才会是rejected  其他情况都不是rejected

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值