summaryrefslogtreecommitdiff
path: root/lib/dojo/promise/tracer.js.uncompressed.js
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2013-03-18 10:26:24 +0400
committerAndrew Dolgov <[email protected]>2013-03-18 10:26:26 +0400
commitf0cfe83e3725f9a3928da97a6e3085e79cb25309 (patch)
tree4b0af188defaa807c7bc6ff3a101b41c9166c463 /lib/dojo/promise/tracer.js.uncompressed.js
parent9a2885da170ffd64358b99194095851a2d09c1b6 (diff)
upgrade dojo to 1.8.3 (refs #570)
Diffstat (limited to 'lib/dojo/promise/tracer.js.uncompressed.js')
-rw-r--r--lib/dojo/promise/tracer.js.uncompressed.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/dojo/promise/tracer.js.uncompressed.js b/lib/dojo/promise/tracer.js.uncompressed.js
new file mode 100644
index 000000000..b5380cc32
--- /dev/null
+++ b/lib/dojo/promise/tracer.js.uncompressed.js
@@ -0,0 +1,85 @@
+define("dojo/promise/tracer", [
+ "../_base/lang",
+ "./Promise",
+ "../Evented"
+], function(lang, Promise, Evented){
+ "use strict";
+
+ // module:
+ // dojo/promise/tracer
+
+ /*=====
+ return {
+ // summary:
+ // Trace promise fulfillment.
+ // description:
+ // Trace promise fulfillment. Calling `.trace()` or `.traceError()` on a
+ // promise enables tracing. Will emit `resolved`, `rejected` or `progress`
+ // events.
+
+ on: function(type, listener){
+ // summary:
+ // Subscribe to traces.
+ // description:
+ // See `dojo/Evented#on()`.
+ // type: String
+ // `resolved`, `rejected`, or `progress`
+ // listener: Function
+ // The listener is passed the traced value and any arguments
+ // that were used with the `.trace()` call.
+ }
+ };
+ =====*/
+
+ var evented = new Evented;
+ var emit = evented.emit;
+ evented.emit = null;
+ // Emit events asynchronously since they should not change the promise state.
+ function emitAsync(args){
+ setTimeout(function(){
+ emit.apply(evented, args);
+ }, 0);
+ }
+
+ Promise.prototype.trace = function(){
+ // summary:
+ // Trace the promise.
+ // description:
+ // Tracing allows you to transparently log progress,
+ // resolution and rejection of promises, without affecting the
+ // promise itself. Any arguments passed to `trace()` are
+ // emitted in trace events. See `dojo/promise/tracer` on how
+ // to handle traces.
+ // returns: dojo/promise/Promise
+ // The promise instance `trace()` is called on.
+
+ var args = lang._toArray(arguments);
+ this.then(
+ function(value){ emitAsync(["resolved", value].concat(args)); },
+ function(error){ emitAsync(["rejected", error].concat(args)); },
+ function(update){ emitAsync(["progress", update].concat(args)); }
+ );
+ return this;
+ };
+
+ Promise.prototype.traceRejected = function(){
+ // summary:
+ // Trace rejection of the promise.
+ // description:
+ // Tracing allows you to transparently log progress,
+ // resolution and rejection of promises, without affecting the
+ // promise itself. Any arguments passed to `trace()` are
+ // emitted in trace events. See `dojo/promise/tracer` on how
+ // to handle traces.
+ // returns: dojo/promise/Promise
+ // The promise instance `traceRejected()` is called on.
+
+ var args = lang._toArray(arguments);
+ this.otherwise(function(error){
+ emitAsync(["rejected", error].concat(args));
+ });
+ return this;
+ };
+
+ return evented;
+});