2013-02-20 10 views
6

Niedawno odkryłem I naprawdę jak jQuery.Deferred() i funkcje, które daje do obsługi asynchronicznej kontroli przepływu (Promises). Przypuszczam, że rzeczy, które najbardziej mi się podobają, to haki oddzwaniania dla żądania Ajax (.done() i .fail()) oraz możliwość otrzymania .resolve() i .reject() obietnicy. Być może potrzebuję tej funkcji w pewnym momencie dla projektu GWT i zastanawiałem się, czy jest coś analogicznego w tym ekosystemie?jQuery.Deferred()/Obiecuje funkcjonalność w GWT?

Odpowiedz

8

gwtquery 1.4.0 narzędzia odroczony w ten sam sposób jQuery robi:

  • one na CommonJS Based Promises/A + Spec
  • Realizacja gQuery inspirowana jest w API jQuery.
  • I obietnice gQuery są zgodne z MVP, więc mogą być uruchamiane w JVM.

Ostatnio daliśmy prezentację gwtquery w GWT.create Conference wprowadzającą nowe rzeczy jak obietnic, można spojrzeć do slides (Push klawiszy strzałek, aby przejść między slajdami).

ajax() teraz zwraca Promise, można również uzyskać promise() powiązane z kolejką dowolnego obiektu gQuery. Dodatkowo możesz utworzyć Deferred() w każdym wywołaniu gwt lub użyć funkcji pomocnika do obsługi RequestBuider, RPC, RF.

Zrobione z testów JUnit, tutaj masz fragment kodu, w jaki sposób można z nich korzystać w kodzie:

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(); 
     } 
    }); 
    } 
6

Właśnie otwartych źródeł Promises for Java zainspirowaną CommonJS obiecuje/A + wniosek i Futures firmy Dart.

Moim celem jest niedługo dodać obsługę GWT (zgodność z GWT dla Promises i FulfillablePromise oraz pomocników przynajmniej dla GWT-RPC).

+0

Nice! Wkrótce spróbuję :) – blong

+0

@Thomas awesome job –

+0

throyer/promises został wycofany. Wszelkie wskazówki, gdzie się udać? – Stevko