2013-02-20 9 views
6

हाल ही में, मैंने पाया है कि मैं वास्तव मेंjQuery.Deferred() और सुविधाओं के रूप में यह आपको एसिंक्रोनस फ्लो कंट्रोल (Promises) को संभालने के लिए देता है। मुझे लगता है कि मुझे अजाक्स अनुरोध (.done() और .fail()) के लिए कॉलबैक हुक सबसे अधिक पसंद है और .resolve() और .reject() एक वादे की क्षमता है। मुझे GWT प्रोजेक्ट के लिए किसी बिंदु पर इस कार्यक्षमता की आवश्यकता हो सकती है और मैं सोच रहा था, क्या उस पारिस्थितिकी तंत्र में कुछ समान है?jQuery.DWferred()/जीडब्ल्यूटी में वादा कार्यक्षमता?

उत्तर

8

gwtquery 1.4.0 लागू करता है उसी तरह jQuery में स्थगित करता है:

  • वे CommonJS के आधार पर कर रहे हैं वादे/ए + कल्पना
  • gQuery कार्यान्वयन jQuery एपीआई में प्रेरित है।
  • और gQuery वादे एमवीपी अनुपालन कर रहे हैं, ताकि वे JVM में चलाए जा सकें।

हाल ही में, हम वादों की तरह नई सामग्री शुरू करने GWT.create Conference में एक gwtquery प्रस्तुति दे दिया है, तो आप slides को एक बार देख ले सकते हैं (धक्का तीर कुंजी स्लाइड के बीच ले जाने के लिए)।

ajax() अब Promise देता है, तो आप किसी भी gQuery ऑब्जेक्ट की कतार से जुड़े promise() प्राप्त कर सकते हैं। इसके अतिरिक्त आप किसी भी gwt कॉलबैक में Deferred() बना सकते हैं या 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(); 
     } 
    }); 
    } 
6

मैं सिर्फ मुक्त-स्रोत Promises for Java CommonJS से प्रेरित वादे/ए + प्रस्ताव है और डार्ट के वायदा।

मेरा लक्ष्य जल्द ही जीडब्ल्यूटी समर्थन को जोड़ना है (Promises और FulfillablePromise के लिए जीडब्ल्यूटी संगतता, और कम से कम, जीडब्ल्यूटी-आरपीसी के लिए सहायक)।

+0

अच्छा! मैं इसे जल्द ही आज़मा दूंगा :) – blong

+0

@ थॉमस भयानक नौकरी –

+0

थ्रॉयर/वादे को हटा दिया गया है। कहां जाना है पर कोई मार्गदर्शन? – Stevko

संबंधित मुद्दे