最近,我发现我真的很喜欢jQuery.Deferred()以及它为您提供的处理异步流控制 ( Promises ) 的特性。我想我最喜欢的东西是 Ajax 请求 ( .done()
and .fail()
) 的回调钩子以及实现.resolve()
和.reject()
承诺的能力。我可能会在某个时候为GWT项目需要这个功能,我想知道,在那个生态系统中是否有类似的东西?
问问题
1888 次
2 回答
8
gwtquery 1.4.0 以与 jquery 相同的方式实现 Deferred:
- 它们基于 CommonJS Promises/A+ 规范
- gQuery 的实现受到 jQuery API 的启发。
- 而且 gQuery Promise 符合 MVP,因此它们可以在 JVM 中运行。
最近,我们在GWT.create 会议上做了一个 gwtquery 演示,介绍了一些新的东西,比如 Promise,你可以看一下幻灯片(按箭头键在幻灯片之间移动)。
ajax()
现在返回 a 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();
}
});
}
于 2013-02-20T19:04:38.457 回答
6
我刚刚开源了受 CommonJS Promises/A+ 提案和 Dart 的 Futures 启发的Java Promises。
我的目标是尽快添加 GWT 支持(GWT 与 和 的兼容性,Promises
以及FulfillablePromise
至少 GWT-RPC 的助手)。
于 2013-02-28T13:51:47.483 回答