想了解完整原理的看
https://mengera88.github.io/2017/05/18/Promise%E5%8E%9F%E7%90%86%E8%A7%A3%E6%9E%90/
let promiseA = new Promise((resolve,reject)=>{});
//other codes here.......
promiseA.then(()=>{
//todo codes here
}).catch(err=>{
//reject codes here
})
怎么做到在该resolve的时候去执行我写在then里的方法的??
既然已经异步执行了别的代码,是怎么回来的?无论我在哪里写的then,它都能在该resolve的时候resolve掉。
其实很简单,不过过一段时间就又很困惑。
Q.什么时候该resolve?
A.
依据new Promise内部的写法,通常有如下几种可能:
比如 setTimeout:timer到时的时候
比如 IO读写:接收到数据的时候
Q.so js runtime是如何知道该resolve了?
A.
比如 setTimeout:加入EventLoop,走EventLoop逻辑。runtime中其他线程负责这种切换。
比如 IO读写,接收到数据的时候,同样,runtime中的负责IO的线程,会将其加入到EventLoop中。
当然以上加入到EventLoop中的还是一个Promise。所以最后还是以Promise的方式,走microTask的EventLoop。
这是EventLoop的问题,见另一篇文章。
So,跟callback一样,不要再纠结了,咋能换件衣服我就觉得你高深莫测!
网友评论