2013-02-20 16 views
6

Vor kurzem habe ich I wirklich wie jQuery.Deferred() entdeckt und die Funktionen, die Sie mit asynchronen Flusskontrolle (Promises) behandelt behandeln. Ich nehme an, die Dinge, die ich am meisten mag sind die Callback-Hooks für eine Ajax-Anfrage (.done() und .fail()) und die Fähigkeit, .resolve() und .reject() ein Versprechen. Ich könnte diese Funktionalität irgendwann für ein GWT Projekt brauchen und ich frage mich, gibt es etwas Analoges in diesem Ökosystem?jQuery.Deferred()/Verspricht Funktionalität in GWT?

Antwort

8

gwtquery 1.4.0 Geräte in der gleichen Art und Weise jquery Latente tut:

  • Sie werden auf der Commonjs basierte Zusagen/A + spec
  • Die gQuery Implementierung in der jQuery API inspiriert ist.
  • Und gQuery Versprechen sind MVP-konform, so wie sie in der JVM ausgeführt werden können.

Vor kurzem haben wir eine gwtquery Präsentation in den GWT.create Conference Einführung neue Sachen wie Versprechen gegeben haben, können Sie einen Blick auf die slides nehmen (Push-Pfeiltasten, um zwischen den Folien zu bewegen).

ajax() gibt jetzt eine Promise zurück, Sie können auch die promise() mit der Warteschlange eines beliebigen gQuery-Objekts verknüpft erhalten. Zusätzlich können Sie Deferred() in jedem gwt Callback erstellen oder Hilfsfunktionen verwenden, um mit RequestBuider, RPC, RF umzugehen.

von den JUnit-Tests genommen, hier können Sie einen Teil des Codes haben, wie können Sie sie in Ihrem Code verwenden: Promises/A + Vorschlag

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

Ich habe gerade Open Source Promises for Java vom Commonjs inspiriert und Dart's Futures.

Mein Ziel ist es, bald GWT-Unterstützung hinzuzufügen (GWT-Kompatibilität für Promises und FulfillablePromise und Helfer für mindestens GWT-RPC).

+0

Schön! Ich werde es bald versuchen :) – blong

+0

@Thomas awesome Job –

+0

throyer/verspricht wurde veraltet. Irgendwelche Hinweise, wo Sie hingehen können? – Stevko