6

最近、私はjQuery.Deferred()とそれが非同期フロー制御(Promises )を処理​​するために提供する機能が本当に好きであることを発見しました。私が最も気に入っているのは、Ajaxリクエスト(および)のコールバックフックと、toおよびpromiseの機能だと思います。GWTプロジェクトのある時点でこの機能が必要になる可能性がありますが、そのエコシステムに類似したものはありますか?.done().fail().resolve().reject()

4

2 に答える 2

8

gwtquery 1.4.0は、jqueryと同じ方法でDeferredを実装します。

  • CommonJS Promises /A+仕様に基づいています
  • gQueryの実装は、jQueryAPIに着想を得ています。
  • また、gQueryのPromiseはMVPに準拠しているため、JVMで実行できます。

最近、GWT.createカンファレンスでgwtqueryプレゼンテーションを行い、promiseなどの新しいものを紹介しました。スライドを見ることができます(スライド間を移動するには矢印キーを押してください)。

ajax()を返すようになりました。gQueryオブジェクトのキューに関連付けられたものをPromise取得することもできます。promise()さらに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();
      }
    });
  }
于 2013-02-20T19:04:38.457 に答える
6

CommonJS Promises /A+の提案とDart'sFuturesに触発されたJava用のPromisesをオープンソース化しました。

私の目標は、GWTサポートをすぐに追加することです(とのGWT互換性、PromisesおよびFulfillablePromise少なくともGWT-RPCのヘルパー)。

于 2013-02-28T13:51:47.483 に答える