BUPT-HJM/study-js

关于promise链的问题

Closed this issue · 4 comments

首先感谢您关于理解promise的文章,但是文章里面,我还有一些问题需要请教您:
关于问题的代码形式是这样的:promise1.then(function(){......return promise2}).then(function(){}])
0.可以详细讲讲上面代码的执行步骤吗?谁调用谁,得到什么结果?
1.promise1.then()返回的是一个所谓的bridge promise对吗?是不是一开始根据调用链就先生成了一堆bridge promise?然后再开始第一个promise的resolve过程?

其实代码没几行,你打个断点或log就清楚整个流程了,https://github.com/BUPT-HJM/study-js/blob/master/%E5%85%B6%E4%BB%96/promise.js,其实文章已经详细讲了你说的问题

  1. 第一个函数执行,返回promise
  2. 调用.then(),返回中间promise
  3. 再调用.then(),返回中间promise
    (所以你说的生成一堆bridge promise是对的)
  4. 第一个函数触发resolve
  5. 第一个promise,pending=>fullfilled,触发函数function(){......return promise2}
  6. 函数触发发现有.then,串联(引用,具体再看文章)到第一个中间promise
  7. function(){......return promise2}触发resolve,由于前面的串联,会执行第一个中间promise的resolve
  8. 然后就又触发到第二个.then中的内容了
  9. 。。。。。。

函数触发发现有.then,串联(引用,具体再看文章)到第一个中间promise,这步关键,但看不太懂:joy:,
1.函数触发发现有.then是怎么做到的?
2.其实第一次是谁调用handle把function(){.....return promise2}和谁的resolve推入谁的deffereds当中?是bridge promise调用handle的吗?怎么做到的?
2.promise1开始resolve,promise1调用handle,发现自己deffereds中的第一个函数返回一个promise(promise2),第一个bridge promise1的resolve被调用,那这里的resolve是谁调用?是promise1还是bridge promise1?
3.进入resolve函数的过程当中,then.call(newValue,resolve),这里的newValue指promise2对吗?resolve指谁的resolve?是bridge promise1的吗?
4.到这步,promise2执行then又返回了一个新的promise,这个promise是最开始的promise链最后的.then()生成的bridge promise2吗?还是这是一个针对promise2的promise?
5.这个所谓的串联是怎样做到的?
6.这整个过程中,除了promise1和promise2之外,还生成了多少个promise?
求赐教:smile:

https://github.com/BUPT-HJM/study-js/blob/master/%E5%85%B6%E4%BB%96/promise.js

🤐建议打断点,打log查看,其实没几行代码,觉得以上问题可以自己解决
像第一个问题,在这里,https://github.com/BUPT-HJM/study-js/blob/master/%E5%85%B6%E4%BB%96/promise.js#L42

@BUPT-HJM 好的👌,谢谢啦