{"id":21444946,"url":"https://github.com/reinert/gdeferred","last_synced_at":"2026-01-23T05:54:31.199Z","repository":{"id":23023946,"uuid":"26376504","full_name":"reinert/gdeferred","owner":"reinert","description":"GWT Deferred/Promise API similar to jQuery.","archived":false,"fork":false,"pushed_at":"2020-10-13T00:21:48.000Z","size":209,"stargazers_count":8,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-14T21:37:56.965Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reinert.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-11-08T22:13:04.000Z","updated_at":"2019-03-20T10:54:59.000Z","dependencies_parsed_at":"2022-08-21T17:50:50.714Z","dependency_job_id":null,"html_url":"https://github.com/reinert/gdeferred","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/reinert/gdeferred","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reinert%2Fgdeferred","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reinert%2Fgdeferred/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reinert%2Fgdeferred/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reinert%2Fgdeferred/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reinert","download_url":"https://codeload.github.com/reinert/gdeferred/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reinert%2Fgdeferred/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28681501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-23T02:22:08.885Z","updated_at":"2026-01-23T05:54:31.179Z","avatar_url":"https://github.com/reinert.png","language":"Java","funding_links":[],"categories":["Promise and Future Library"],"sub_categories":[],"readme":"\u003c!--\n  Copyright 2013 Ray Tsang\n  Copyright 2014 Danilo Reinert\n\n  Licensed under the Apache License, Version 2.0 (the \"License\");\n  you may not use this file except in compliance with the License.\n  You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n  Unless required by applicable law or agreed to in writing, software\n  distributed under the License is distributed on an \"AS IS\" BASIS,\n  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n  See the License for the specific language governing permissions and\n  limitations under the License.\n--\u003e\n\nGDeferred\n=========\nGDeferred is a fork of [JDeferred](https://github.com/jdeferred/jdeferred.git) - \"Java Deferred/Promise library similar to JQuery's Deferred Object\" - reimplemented for GWT.\n\n\u003ca name=\"features\"\u003e\u003c/a\u003eFeatures\n--------\n* Deferred Object and Promise\n* Promise callbacks\n  * ```.then(…)```\n  * ```.done(…)```\n  * ```.fail(…)```\n  * ```.progress(…)```\n  * ```.always(…)```\n* Multiple promises ([soon!](https://github.com/reinert/gdeferred/issues/1))\n  * ```.when(p1, p2, p3, …).then(…)```\n* Java Generics support\n  * ```Deferred\u003cInteger, Exception, Double\u003e deferred;```\n  * ```deferred.resolve(10);```\n  * ```deferred.reject(new Exception());```\n  * ```deferred.progress(0.80);```\n* Java 8 Lambda friendly\n\n\u003ca name=\"examples\"\u003e\u003c/a\u003eQuick Examples\n==============\n\n\u003ca name=\"examples-deferred-promise\"\u003e\u003c/a\u003eDeferred Object and Promise\n---------------------------\n\n```java\nDeferred deferred = new DeferredObject();\nPromise promise = deferred.promise();\npromise.done(new DoneCallback() {\n  public void onDone(Object result) {\n    ...\n  }\n}).fail(new FailCallback() {\n  public void onFail(Object rejection) {\n    ...\n  }\n}).progress(new ProgressCallback() {\n  public void onProgress(Object progress) {\n    ...\n  }\n}).always(new AlwaysCallback() {\n  public void onAlways(State state, Object result, Object rejection) {\n    ...\n  }\n});\n```\nWith the reference to deferred object, you can then trigger actions/updates:\n\n```java\ndeferred.resolve(\"done\");\ndeferred.reject(\"oops\");\ndeferred.progress(\"100%\");\n```\n\n\u003ca name=\"example-filter\"\u003e\u003c/a\u003eFilter\n-----------\nFiltering allows one to return a different promise of the *same* state.\n\n```java\nDeferred d = …;\nPromise p = d.promise();\nPromise filtered = p.then(new DoneFilter\u003cInteger, Integer\u003e() {\n  public Integer filterDone(Integer result)\n    return result * 10;\n  }\n});\n\nfiltered.done(new DoneCallback\u003cInteger\u003e{\n  public void onDone(Integer result) {\n    // result would be original * 10\n    System.out.println(result);\n  }\n});\n\nd.resolve(3) -\u003e 30.\n```\n\n\u003ca name=\"example-pipe\"\u003e\u003c/a\u003ePipe\n----\nPiping allows one to return a different promise of the *any* state.\n\n```java\nDeferred d = ...;\nPromise p = d.promise();\n\np.then(new DonePipe\u003cInteger, Integer, Exception, Void\u003e() {\n  public Deferred\u003cInteger, Exception, Void\u003e pipeDone(Integer result) {\n    if (result \u003c 100) {\n      return new DeferredObject\u003cInteger, Void, Void\u003e().resolve(result);\n    } else {\n      return new DeferredObject\u003cInteger, Void, Void\u003e().reject(new Exception(...));\n    }\n  }\n}).done(...).fail(...);\n\nd.resolve(80) -\u003e done!\nd.resolve(100) -\u003e fail!\n```\n\n\u003ca name=\"example-lambda\"\u003e\u003c/a\u003eJava 8 Lambda\n-------------\nNow this is pretty cool when used with Java 8 Lambda!\n\n```Java\ndm.when(() -\u003e {\n  return \"Hey!\";\n}).done(r -\u003e System.out.println(r));\n\ndm.when(\n  () -\u003e { return \"Hello\"; },\n  () -\u003e { return \"World\"; }\n).done(rs -\u003e\n  rs.forEach(r -\u003e System.out.println(r.getResult()))\n);\n```\n\n## Documentation\n* [Javadocs](http://reinert.github.io/gdeferred/javadoc/apidocs/index.html)\n\n## Downloads\nGDeferred is currently available at maven central.\n\n### Maven\n```\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.reinert.gdeferred\u003c/groupId\u003e\n    \u003cartifactId\u003egdeferred\u003c/artifactId\u003e\n    \u003cversion\u003e0.9.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## License\nGDeferred is freely distributable under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0.html)\n\n\u003c!-- Google Code for GitHub Visit Conversion Page --\u003e\n\u003cscript type=\"text/javascript\"\u003e\n/* \u003c![CDATA[ */\nvar google_conversion_id = 974052972;\nvar google_conversion_language = \"en\";\nvar google_conversion_format = \"3\";\nvar google_conversion_color = \"ffffff\";\nvar google_conversion_label = \"wsVZCOycvgkQ7Ly70AM\";\nvar google_conversion_value = 0;\nvar google_remarketing_only = false;\n/* ]]\u003e */\n\u003c/script\u003e\n\u003cscript type=\"text/javascript\" src=\"//www.googleadservices.com/pagead/conversion.js\"\u003e\n\u003c/script\u003e\n\u003cnoscript\u003e\n\u003cdiv style=\"display:inline;\"\u003e\n\u003cimg height=\"1\" width=\"1\" style=\"border-style:none;\" alt=\"\" src=\"//www.googleadservices.com/pagead/conversion/974052972/?value=0\u0026amp;label=wsVZCOycvgkQ7Ly70AM\u0026amp;guid=ON\u0026amp;script=0\"/\u003e\n\u003c/div\u003e\n\u003c/noscript\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freinert%2Fgdeferred","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freinert%2Fgdeferred","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freinert%2Fgdeferred/lists"}