神奇的promise返回

神奇的promise返回

本次课程经常能看到 return 一个promise对象,后面有很多.then()的连缀,比如这样:

return  axios.get(url).then().catch().then().then() ....  等等,

但是return语句是一个同步的操作,而promise中执行的任务往往是异步的,

也就是说我使用return语句拿到promise对象时,这时候promise中的任务很可能并没有执行完,这时候的promise都没有resolve和reject的状态,那么理论上也不该去执行then中的方法,然而我确实拿到了最后一层的promise,也就是最后一个then返回的promise

这中间到底发生了什么?




正在回答

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

3回答

同学你好,代码本来就是顺序执行。几个then会顺序执行,返回promise。异步是说的里面的回调没有执行,即虽然返回promise ,但是状态没有返回时,后面的then里面的回调是不会执行的。把链式调用拆开看就好明白了。示例:

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

如下,先输出几个promise对象,分别就是p ,p1,和p2。说明代码顺序执行时,两个then是先返回了promise对象 。只不过里面的回调没有执行 ,当第一个p中定时器1s之后执行,才会输出了1 ,输出1之后再返回成功状态,然后后面的then中接收了成功状态,执行回调输出2......链式调用也是一样的,几个then会依次返回promise,只不过链式调用,最终输出的是最后一个then的promise对象。

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

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

  • 楚楚提 提问者 #1
    好像有点明白了,相当于先上车后买票了,只要是then都会返回promise的对象,只不过这个返回的promise对象,他的决议状态未必是成功或失败,如果有异步操作,相当于先拿到了一个等待状态的promise对象,然后异步执行完了才会逐步判断他的状态对么?
    2020-02-26 21:32:19
  • 好帮手慕夭夭 回复 提问者 楚楚提 #2
    可以这样理解。
    2020-02-27 10:12:27
提问者 楚楚提 2020-02-26 18:33:32

我的问题不是哪一个代码的问题,我已经在问题里面描述过了,就是return 一个promise对象时,比如   axios.get(url).then.then.then连缀好几次,return时返回的promise对象立即就是最会一个then返回的promise对象,但是axios.get(url)返回的promise里面做的是一个异步访问的操作,如果没有resolve或者reject,他是不会执行下一个then中的方法的,这里应该有一个过程和时间才对,

也就是 我直接

return axios.get(url).then.then.then

居然立即拿到了最后一个then返回的promise对象,这难道不奇怪么?相当于异步操作一瞬间完成了?


好帮手慕夭夭 2020-02-26 18:00:25

同学你好,不知道你的代码如何写的,请把完整代码粘贴到问答区,以便老师定位问题。

祝学习愉快!

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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