123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- if(!dojo._hasResource["dojo._base.Deferred"]){
- dojo._hasResource["dojo._base.Deferred"] = true;
- dojo.provide("dojo._base.Deferred");
- dojo.require("dojo._base.lang");
- (function(){
- var mutator = function(){};
- var freeze = Object.freeze || function(){};
-
- dojo.Deferred = function(/*Function?*/canceller){
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- var result, finished, isError, head, nextListener;
- var promise = (this.promise = {});
-
- function complete(value){
- if(finished){
- throw new Error("This deferred has already been resolved");
- }
- result = value;
- finished = true;
- notify();
- }
- function notify(){
- var mutated;
- while(!mutated && nextListener){
- var listener = nextListener;
- nextListener = nextListener.next;
- if((mutated = (listener.progress == mutator))){
- finished = false;
- }
- var func = (isError ? listener.error : listener.resolved);
- if (func) {
- try {
- var newResult = func(result);
- if (newResult && typeof newResult.then === "function") {
- newResult.then(dojo.hitch(listener.deferred, "resolve"), dojo.hitch(listener.deferred, "reject"));
- continue;
- }
- var unchanged = mutated && newResult === undefined;
- if(mutated && !unchanged){
- isError = newResult instanceof Error;
- }
- listener.deferred[unchanged && isError ? "reject" : "resolve"](unchanged ? result : newResult);
- }
- catch (e) {
- listener.deferred.reject(e);
- }
- }else {
- if(isError){
- listener.deferred.reject(result);
- }else{
- listener.deferred.resolve(result);
- }
- }
- }
- }
-
- this.resolve = this.callback = function(value){
-
-
- this.fired = 0;
- this.results = [value, null];
- complete(value);
- };
-
-
-
- this.reject = this.errback = function(error){
-
-
- isError = true;
- this.fired = 1;
- complete(error);
- this.results = [null, error];
- if(!error || error.log !== false){
- (dojo.config.deferredOnError || function(x){ console.error(x); })(error);
- }
- };
-
- this.progress = function(update){
-
-
- var listener = nextListener;
- while(listener){
- var progress = listener.progress;
- progress && progress(update);
- listener = listener.next;
- }
- };
- this.addCallbacks = function(/*Function?*/callback, /*Function?*/errback){
- this.then(callback, errback, mutator);
- return this;
- };
-
- this.then = promise.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel);
- var listener = {
- resolved: resolvedCallback,
- error: errorCallback,
- progress: progressCallback,
- deferred: returnDeferred
- };
- if(nextListener){
- head = head.next = listener;
- }
- else{
- nextListener = head = listener;
- }
- if(finished){
- notify();
- }
- return returnDeferred.promise;
- };
- var deferred = this;
- this.cancel = promise.cancel = function () {
-
-
- if(!finished){
- var error = canceller && canceller(deferred);
- if(!finished){
- if (!(error instanceof Error)) {
- error = new Error(error);
- }
- error.log = false;
- deferred.reject(error);
- }
- }
- };
- freeze(promise);
- };
- dojo.extend(dojo.Deferred, {
- addCallback: function (/*Function*/callback) {
- return this.addCallbacks(dojo.hitch.apply(dojo, arguments));
- },
-
- addErrback: function (/*Function*/errback) {
- return this.addCallbacks(null, dojo.hitch.apply(dojo, arguments));
- },
-
- addBoth: function (/*Function*/callback) {
- var enclosed = dojo.hitch.apply(dojo, arguments);
- return this.addCallbacks(enclosed, enclosed);
- },
- fired: -1
- });
- })();
- dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback, /*Function?*/progressHandler){
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if(promiseOrValue && typeof promiseOrValue.then === "function"){
- return promiseOrValue.then(callback, errback, progressHandler);
- }
- return callback(promiseOrValue);
- };
- }
|