GWT中的jQuery.Deferred()/ Promises功能?

blo*_*ong 6 jquery gwt gwtquery promise jquery-deferred

最近,我发现我非常喜欢jQuery.Deferred()以及它为您提供处理异步流控制(Promises)的功能.我认为我最喜欢的东西是Ajax请求(.done().fail())的回调钩子以及能力.resolve().reject()承诺.我可能在某个时候需要这个功能用于GWT项目,我想知道,该生态系统中有什么类似的东西吗?

Man*_*ino 8

gwtquery 1.4.0以与jquery相同的方式实现延迟:

  • 它们基于CommonJS Promises/A +规范
  • gQuery实现受到jQuery API的启发.
  • gQuery promises与MVP兼容,因为它们可以在JVM中运行.

最近,我们在GWT.create会议上发布了gwtquery演示文稿,介绍了诸如promises之类的新内容,你可以看一下幻灯片(按箭头键在幻灯片之间移动).

ajax()现在返回一个Promise,你也可以获得promise()与任何gQuery对象的队列相关联.此外,您可以Deferred()在任何gwt回调中创建或使用帮助函数来处理RequestBuider,RPC,RF.

从junit测试中获取,这里有一部分代码可以在代码中使用它们:

  public void testDeferredAjaxWhenDone() {
    String url = "https://www.googleapis.com/blogger/v2/blogs/user_id/posts/post_id?callback=?&key=NO-KEY";

    delayTestFinish(5000);
    GQuery.when(Ajax.getJSONP(url))
      .done(new Function() {
        public void f() {
          Properties p = arguments(0);
          assertEquals(400, p.getProperties("error").getInt("code"));
          finishTest();
        }
      });
  }

  public void testDeferredAjaxWhenFail() {
    String url1 = "https://www.googleapis.com/blogger/v2/blogs/user_id/posts/post_id?callback=?&key=NO-KEY";
    String url2 = "https://localhost:4569/foo";

    delayTestFinish(5000);
    GQuery.when(
     Ajax.getJSONP(url1), 
     Ajax.getJSONP(url2))
      .done(new Function() {
        public void f() {
          fail();
        }
      })
      .fail(new Function(){
        public void f() {
          finishTest();
        }
      });
  }

  int progress = 0;
  public void testPromiseFunction() {
    delayTestFinish(3000);
    final Promise doSomething = new PromiseFunction() {
      @Override
      public void f(final Deferred dfd) {
        new Timer() {
          int count = 0;
          public void run() {
            dfd.notify(count ++);
            if (count > 3) {
              cancel();
              dfd.resolve("done");
            }
          }
        }.scheduleRepeating(50);
      }
    };

    doSomething.progress(new Function() {
      public void f() {
        progress = arguments(0);
      }
    }).done(new Function() {
      public void f() {
        assertEquals(3, progress);
        assertEquals(Promise.RESOLVED, doSomething.state());
        finishTest();
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)


Tho*_*yer 6

我只是受到CommonJS Promises/A +提案和Dart's Futures 的开源Promise for Java.

我的目标是尽快添加GWT支持(GWT兼容性PromisesFulfillablePromise,以及至少GWT-RPC的帮助程序).