gpt4 book ai didi

jQuery.Deferred()/GWT 中的 Promises 功能?

转载 作者:行者123 更新时间:2023-12-03 22:45:36 25 4
gpt4 key购买 nike

最近,我发现我真的喜欢jQuery.Deferred()以及它为您提供的处理异步流控制的功能 ( Promises )。我想我最喜欢的事情是 Ajax 请求的回调 Hook (.done().fail() )以及 .resolve( ).reject() 一个 promise 。我可能在某个时候需要此功能 GWT项目,我想知道,该生态系统中有类似的东西吗?

最佳答案

gwtquery 1.4.0 以与 jquery 相同的方式实现 Deferred:

  • 它们基于 CommonJS Promises/A+ 规范
  • gQuery 实现的灵感来自于 jQuery API。
  • 并且 gQuery Promise 符合 MVP,因此它们可以在 JVM 中运行。

最近,我们在 GWT.create Conference 中进行了 gwtquery 演示,介绍了 Promise 等新内容,您可以查看 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();
}
});
}

关于jQuery.Deferred()/GWT 中的 Promises 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com