jQuery技术

Java的Deferred/Promise类库:JDeferred

字号+ 作者:H5之家 来源:H5之家 2015-10-17 09:48 我要评论( )

JDeferred是一个 Java Deferred/Promise 类库类似于 JQuery的Deferred对象。 灵感源于 JQuery和 Android Deferred Ob

Java的Deferred/Promise类库:JDeferred

JDeferred是一个 Java Deferred/Promise 类库类似于 JQuery的Deferred对象。 灵感源于 JQuery和 Android Deferred Ob

JDeferred是一个 Java Deferred/Promise 类库类似于 JQuery的Deferred对象。

灵感源于 JQuery和 Android Deferred Object。

特性:
  • Deferred object and Promise
  • Promise callbacks
  • Multiple promises
  • .when(p1, p2, p3, …).then(…)
  • Callable and Runnable wrappers
  • .when(new Runnable() {…})
  • Uses Executor Service
  • Java Generics support
  • Deferred deferred = new DeferredObject(); Promise promise = deferred.promise(); promise.done(new DoneCallback() { public void onDone(Object result) { ... } }).fail(new FailCallback() { public void onFail(Object rejection) { ... } }).progress(new ProgressCallback() { public void onProgress(Object progress) { ... } }).always(new AlwaysCallback() { public void onAlways(State state, Object result, Object rejection) { ... } });
    jQuer 1.5版本引入Deferred功能, 为处理事件回调提供了更加强大而灵活的编程模型.

    什么Deferred
    根据jQuery的官方api文档的描述: jQuery.Deferred()是可链式调用的工具对象, 它能够注册回调函数到一个队列中, 依次调用该队列中的回调函数,并且能够将调链中上一个函数(同步或者异步)的返回状态传递到下一个回调函数中.

    jQuery.Deferred()背后的设计理念来自CommonJS Promises/A , jQuery.Deferred()基于这个理念实现,但并没有完全遵循其设计。其它语言或者框架,例如python和dojo中都有类似的实现。

    下面简单介绍一下 “Promises”的设计思想,目的在于下文介绍jQuery.Deferred()的API时,让大家能有一个理论上的了解。

    Promise, 中文可以理解为愿望,代表单个操作完成的最终结果。一个Promise拥有三种状态:分别是unfulfilled(未满足的)、fulfilled(满足的)、failed(失败的),fulfilled状态和failed状态都可以被监听。一个愿望可以从未满足状态变为满足或者失败状态,一旦一个愿望处于满足或者失败状态,其状态将不可再变化。这种“不可改变”的特性对于一个Promise来说非常的重要,它可以避免Promise的状态监听器修改一个Promise的状态导致别的监听器的行为异常。例如:一个监听fulfilled状态的监听器把Promise的状态修改为failed,那么将触发failed状态的监听器,而如果一个failed状态监听器又把Promise的状态设置为fulfilled,那么又将触发fulfilled状态的监听器,这样将导致死循环。另外一种理解Promise这种特性的方式是把Promise看成是javascript中的primative类型的变量,这种变量可以被传入被调用的函数中,但是不可以被调用函数所改变。

    每一个Promise对象都有一个方法:then(fulfilledHandler, errorHandler, progressHandler),用于监听一个Promise的不同状态。fulfilledHandler用于监听fulfilled事件,errorHandler用于监听failed事件,progressHandler用于监听progress事件。一个Promise不强制实现progress状态的事件监听(jQuery的Deferred就是一个Promise的实现,但没有实现对progress状态事件的处理)。

    关于jQuery的Deferred 详见:



  • 上一篇:Java 并发之 Future 接口
  • 下一篇:Java文件操作类封装

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • LUPA开源周刊:jQuery十周年Android最新进展盘点

      LUPA开源周刊:jQuery十周年Android最新进展盘点

      2016-01-31 11:27

    • jQuery仿Android样式扁平风格图标插件

      jQuery仿Android样式扁平风格图标插件

      2015-10-15 10:22

    • 关于jquery的datagrid 插件中a标签传值的问题

      关于jquery的datagrid 插件中a标签传值的问题

      2015-10-14 14:39

    • jQuery.validate errorPlacement和success共用有问题

      jQuery.validate errorPlacement和success共用有问题

      2015-10-14 11:37

    网友点评
    1