Browse Source

First implementation

Herbert Vojčík 8 years ago
parent
commit
618354ad0f
1 changed files with 34 additions and 0 deletions
  1. 34 0
      promised.js

+ 34 - 0
promised.js

@@ -0,0 +1,34 @@
+define([], {
+    load: function (name, req, load) {
+        if (!/^require\$promised\$/.test(name)) {
+            load.error(new Error("I can only promisize 'require', not '" + name.split('$')[0] + "'. Use 'promised!require' as module name."));
+            return;
+        }
+        if (typeof Promise !== "function" || !Promise.prototype.then) {
+            load.error(new Error("Promise not present or has not Promise API."));
+            return;
+        }
+        var fn = function (deps, callback, errback) {
+            if (typeof deps === "string") {
+                return req.apply(this, arguments);
+            }
+            var promise = new Promise(function (resolve, reject) {
+                req(deps, function () {
+                    resolve(Array.prototype.slice.call(arguments));
+                }, reject);
+            });
+            if (callback) promise = promise.then(function (modules) {
+                callback.apply(null, modules);
+            });
+            if (errback) promise = promise.then(null, errback);
+            return promise;
+        };
+        Object.keys(req).forEach(function (k) {
+            fn[k] = req[k];
+        });
+        load(fn);
+    },
+    normalize: function (name, normalize) {
+        return normalize(name) + "$promised$" + Date.now().toString(36) + Math.random().toString(32).slice(1);
+    }
+});