jQuery源码,Deferred实现原理–“回调”
Deferred:延迟对象,对异步进行统一管理
当使用同步思维的书写方式,遇见异步执行的逻辑,deferred延迟,可以帮你按照书写顺序保持逻辑上的同步
先来看个栗子:
<script>
setTimeout(() => {
alert(1);
}, 1000);
alert(2);
</script>
逻辑顺序是希望先弹出1在弹出2,
然而,定时器是异步的,并不会影响后面代码执行,所以实际上是
先弹出2经1s后再弹出1,
这种异于正常逻辑的顺序对于可读性和后期维护方面是不利的,尤其是,多函数关系嵌套
怎么改呢?
原理实现如下:
<script>
var df = $.Deferred()
setTimeout(() => {
alert(1)
df.resolve()
}, 1000)
df.done(() => {
alert(2)
})
</script>