|
Struts example source code file (Deferred.js)
The Struts Deferred.js source code/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml */ dojo.provide("dojo.Deferred"); dojo.require("dojo.lang.func"); dojo.Deferred = function (canceller) { this.chain = []; this.id = this._nextId(); this.fired = -1; this.paused = 0; this.results = [null, null]; this.canceller = canceller; this.silentlyCancelled = false; }; dojo.lang.extend(dojo.Deferred, {getFunctionFromArgs:function () { var a = arguments; if ((a[0]) && (!a[1])) { if (dojo.lang.isFunction(a[0])) { return a[0]; } else { if (dojo.lang.isString(a[0])) { return dj_global[a[0]]; } } } else { if ((a[0]) && (a[1])) { return dojo.lang.hitch(a[0], a[1]); } } return null; }, makeCalled:function () { var deferred = new dojo.Deferred(); deferred.callback(); return deferred; }, repr:function () { var state; if (this.fired == -1) { state = "unfired"; } else { if (this.fired == 0) { state = "success"; } else { state = "error"; } } return "Deferred(" + this.id + ", " + state + ")"; }, toString:dojo.lang.forward("repr"), _nextId:(function () { var n = 1; return function () { return n++; }; })(), cancel:function () { if (this.fired == -1) { if (this.canceller) { this.canceller(this); } else { this.silentlyCancelled = true; } if (this.fired == -1) { this.errback(new Error(this.repr())); } } else { if ((this.fired == 0) && (this.results[0] instanceof dojo.Deferred)) { this.results[0].cancel(); } } }, _pause:function () { this.paused++; }, _unpause:function () { this.paused--; if ((this.paused == 0) && (this.fired >= 0)) { this._fire(); } }, _continue:function (res) { this._resback(res); this._unpause(); }, _resback:function (res) { this.fired = ((res instanceof Error) ? 1 : 0); this.results[this.fired] = res; this._fire(); }, _check:function () { if (this.fired != -1) { if (!this.silentlyCancelled) { dojo.raise("already called!"); } this.silentlyCancelled = false; return; } }, callback:function (res) { this._check(); this._resback(res); }, errback:function (res) { this._check(); if (!(res instanceof Error)) { res = new Error(res); } this._resback(res); }, addBoth:function (cb, cbfn) { var enclosed = this.getFunctionFromArgs(cb, cbfn); if (arguments.length > 2) { enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2); } return this.addCallbacks(enclosed, enclosed); }, addCallback:function (cb, cbfn) { var enclosed = this.getFunctionFromArgs(cb, cbfn); if (arguments.length > 2) { enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2); } return this.addCallbacks(enclosed, null); }, addErrback:function (cb, cbfn) { var enclosed = this.getFunctionFromArgs(cb, cbfn); if (arguments.length > 2) { enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2); } return this.addCallbacks(null, enclosed); return this.addCallbacks(null, cbfn); }, addCallbacks:function (cb, eb) { this.chain.push([cb, eb]); if (this.fired >= 0) { this._fire(); } return this; }, _fire:function () { var chain = this.chain; var fired = this.fired; var res = this.results[fired]; var self = this; var cb = null; while (chain.length > 0 && this.paused == 0) { var pair = chain.shift(); var f = pair[fired]; if (f == null) { continue; } try { res = f(res); fired = ((res instanceof Error) ? 1 : 0); if (res instanceof dojo.Deferred) { cb = function (res) { self._continue(res); }; this._pause(); } } catch (err) { fired = 1; res = err; } } this.fired = fired; this.results[fired] = res; if ((cb) && (this.paused)) { res.addBoth(cb); } }}); Other Struts examples (source code examples)Here is a short list of links related to this Struts Deferred.js source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.