神奇的promise返回
本次课程经常能看到 return 一个promise对象,后面有很多.then()的连缀,比如这样:
return axios.get(url).then().catch().then().then() .... 等等,
但是return语句是一个同步的操作,而promise中执行的任务往往是异步的,
也就是说我使用return语句拿到promise对象时,这时候promise中的任务很可能并没有执行完,这时候的promise都没有resolve和reject的状态,那么理论上也不该去执行then中的方法,然而我确实拿到了最后一层的promise,也就是最后一个then返回的promise
这中间到底发生了什么?
正在回答
同学你好,代码本来就是顺序执行。几个then会顺序执行,返回promise。异步是说的里面的回调没有执行,即虽然返回promise ,但是状态没有返回时,后面的then里面的回调是不会执行的。把链式调用拆开看就好明白了。示例:
如下,先输出几个promise对象,分别就是p ,p1,和p2。说明代码顺序执行时,两个then是先返回了promise对象 。只不过里面的回调没有执行 ,当第一个p中定时器1s之后执行,才会输出了1 ,输出1之后再返回成功状态,然后后面的then中接收了成功状态,执行回调输出2......链式调用也是一样的,几个then会依次返回promise,只不过链式调用,最终输出的是最后一个then的promise对象。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
我的问题不是哪一个代码的问题,我已经在问题里面描述过了,就是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对象,这难道不奇怪么?相当于异步操作一瞬间完成了?
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星