ihtml5 / blog

个人博客 源码阅读*前端实践 My Blog
MIT License
6 stars 0 forks source link

jquery源码阅读之deferred篇 #63

Open ihtml5 opened 7 years ago

ihtml5 commented 7 years ago

一、defrred模块作用

deferred 故名思意 延迟对象。由于javascript单线程的缘故,javasript中异步编程特别场景,比如事件回调,ajax请求,web worker,动画,javascript和其他语言通信等,异步是保证数据完整和体验流畅性的重要保证。

简单地说,异步就是在某一刻注册你要做的什么事,将来某件事完成之后,再通知你做这个事。在jquery中defereed模块建立在callbacks模块上,为ajax,动画,事件模块提供异步功能

二、代码示例

var df = $.Deferred();
df.done(function (value) { alert(value); }).fail(function(value) { alert(value*2);}
df.resolve(6);

三、API 详解

  1. 生成deferred对象

    $.Deferred()

  2. done

    添加异步事件执行成功触发的函数

  3. fail

    添加异步事件执行失败触发的函数

  4. progress

    添加异步事件执行过程中触发的函数

  5. resolve/resolveWith

    通知异步事件执行成功,将异步对象状态设置为resolved,并传递参数给成功回调函数队列

  6. reject/rejectWith

    通知异步事件执行失败,将异步对象状态设置为rejected,并传递参数给失败回调函数队列

  7. notify/notifyWith

    通知异步事件执行失败,将异步对象状态设置为rejected,并传递参数给成功回调函数队列

  8. then

    将传入的值进行过滤,建立主异步对象和副异步对象的关联,当主异步对象状态变更时,就会 层层通知副异步对象执行

  9. always

    无论异步事件是否执行成功,都会执行always

  10. promise

    返回当前异步对象的副本,不含resolve/resolveWith/reject/rejectWith/notify/notifyWith

四、源码分析

参考资料

  1. jQuery 2.0.3 源码分析 Deferred概念
  2. jQuery 2.0.3 源码分析 Deferred(最细的实现剖析,带图)
  3. jQuery源码学习:Deferred Object