]> git.wh0rd.org - tt-rss.git/blobdiff - lib/dojo/promise/first.js.uncompressed.js
upgrade dojo to 1.8.3 (refs #570)
[tt-rss.git] / lib / dojo / promise / first.js.uncompressed.js
diff --git a/lib/dojo/promise/first.js.uncompressed.js b/lib/dojo/promise/first.js.uncompressed.js
new file mode 100644 (file)
index 0000000..863573f
--- /dev/null
@@ -0,0 +1,49 @@
+define("dojo/promise/first", [
+       "../_base/array",
+       "../Deferred",
+       "../when"
+], function(array, Deferred, when){
+       "use strict";
+
+       // module:
+       //              dojo/promise/first
+
+       var forEach = array.forEach;
+
+       return function first(objectOrArray){
+               // summary:
+               //              Takes multiple promises and returns a new promise that is fulfilled
+               //              when the first of these promises is fulfilled.
+               // description:
+               //              Takes multiple promises and returns a new promise that is fulfilled
+               //              when the first of these promises is fulfilled. Canceling the returned
+               //              promise will *not* cancel any passed promises. The promise will be
+               //              fulfilled with the value of the first fulfilled promise.
+               // objectOrArray: Object|Array?
+               //              The promises are taken from the array or object values. If no value
+               //              is passed, the returned promise is resolved with an undefined value.
+               // returns: dojo/promise/Promise
+
+               var array;
+               if(objectOrArray instanceof Array){
+                       array = objectOrArray;
+               }else if(objectOrArray && typeof objectOrArray === "object"){
+                       array = [];
+                       for(var key in objectOrArray){
+                               if(Object.hasOwnProperty.call(objectOrArray, key)){
+                                       array.push(objectOrArray[key]);
+                               }
+                       }
+               }
+
+               if(!array || !array.length){
+                       return new Deferred().resolve();
+               }
+
+               var deferred = new Deferred();
+               forEach(array, function(valueOrPromise){
+                       when(valueOrPromise, deferred.resolve, deferred.reject);
+               });
+               return deferred.promise;        // dojo/promise/Promise
+       };
+});