]> git.parisson.com Git - pdf.js.git/commitdiff
Add very simple Promise object
authorJulian Viereck <julian.viereck@gmail.com>
Thu, 8 Sep 2011 00:15:35 +0000 (17:15 -0700)
committerJulian Viereck <julian.viereck@gmail.com>
Thu, 15 Sep 2011 16:02:25 +0000 (09:02 -0700)
worker.js

index 61e4c20b9e5759425dd4d1c67fa4133099895237..9db894d323987040357de0d26c015f86e112cbe7 100644 (file)
--- a/worker.js
+++ b/worker.js
@@ -53,6 +53,38 @@ var WorkerPage = (function() {
 // This holds a list of objects the IR queue depends on.
 var Objects = {};
 
+var Promise = (function() {
+  function Promise(name) {
+    this.name = name;
+    this.isResolved = false;
+  };
+  
+  Promise.prototype = {
+    resolve: function(data) {
+      if (this.isResolved) {
+        throw "A Promise can be resolved only once";
+      }
+      
+      this.isResolved = true;
+      this.data = data;
+      var callbacks = this.callbacks;
+      
+      for (var i = 0; i < callbacks.length; i++) {
+        callbacks[i].call(null, data);
+      }
+    },
+    
+    then: function(callback) {
+      // If the promise is already resolved, call the callback directly.
+      if (this.isResolved) {
+        callback.call(null, this.data);
+      } else {
+        this.callbacks.push(callback);        
+      }
+    }
+  }
+})();
+
 var WorkerPDFDoc = (function() {
   function constructor(data) {
     this.data = data;