blo*_*ong 6 jquery gwt gwtquery promise jquery-deferred
最近,我发现我非常喜欢jQuery.Deferred()以及它为您提供处理异步流控制(Promises)的功能.我认为我最喜欢的东西是Ajax请求(.done()和.fail())的回调钩子以及能力.resolve()和.reject()承诺.我可能在某个时候需要这个功能用于GWT项目,我想知道,该生态系统中有什么类似的东西吗?
gwtquery 1.4.0以与jquery相同的方式实现延迟:
最近,我们在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)
我只是受到CommonJS Promises/A +提案和Dart's Futures 的开源Promise for Java.
我的目标是尽快添加GWT支持(GWT兼容性Promises和FulfillablePromise,以及至少GWT-RPC的帮助程序).