promise的执行流程?

promise的执行流程?

//写法一,直接new一个promise,执行结果是1234都能打印出,但是并没有1秒的延迟
let p=new Promise(resolve=>{
    setTimeout(()=>resolve(),1000)
});
p
.then(()=>console.log(1))
.then(()=>console.log(2))
.then(()=>console.log(3))
.then(()=>console.log(4));

//写法二,把promise包裹在函数中,结果跟结果一一样
function p(){
    return new Promise(resolve=>{
        setTimeout(()=>resolve(),1000)
    })
}
p()
.then(()=>console.log(1))
.then(()=>console.log(2))
.then(()=>console.log(3))
.then(()=>console.log(4));

//写法三:在每次调用then时都再return出函数p(),就能正确按意愿每隔一秒打印出1234了
function p(){
    return new Promise(resolve=>{
        setTimeout(()=>resolve(),1000)
    })
}
p()
.then(()=>{console.log(1);return p()})
.then(()=>{console.log(2);return p()})
.then(()=>{console.log(3);return p()})
.then(()=>console.log(4));

请问前面两种写法为什么错了?他们每一步都是怎么执行的

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕夭夭 2019-08-10 15:37:07

“慕函数0414863”同学你好,return就是给函数设置返回值,then里面的箭头函数 ,调用p()如果不加return, 那么这个函数返回值默认就是undefined。所以需要加return ,把Promise实例作为函数的返回值,这样下一个then才能够接收到上一个Promise实例的状态,等上一个执行完毕之后,才会执行下一个then哦。

祝学习愉快。

好帮手慕夭夭 2019-05-27 18:28:07

你好同学,前两种写法都是因为没有在then里面没有返回Promise实例,这样链式调用中,不用等上一个then执行完毕再执行下一个了,所以几个then里面的代码就一行一行顺序执行了。

Promise的执行流程是这样的,拿第三个举例子,参考如下注释理解:

http://img1.sycdn.imooc.com//climg/5cebba370001697d10570343.jpg

祝学习愉快 ,望采纳。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师