AMD.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /**
  2. * Licensed Materials - Property of IBM
  3. * IBM Watson Analytics (C) Copyright IBM Corp. 2014, 2016, 2017
  4. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  5. */
  6. if (typeof define !== 'function') {
  7. var define = require('amdefine')(module); // jshint ignore:line
  8. }
  9. define(['bluebird', 'require'], function(Promise, require) {
  10. return {
  11. /**
  12. * Custom require function to use;
  13. * setting to null, will use the global require
  14. * @type {Function}
  15. */
  16. require: null,
  17. //
  18. // Loads modules using Promise API rather than callbacks
  19. //
  20. // Usage:
  21. // AMD.loadModules(['a/b/c', 'd/e/f'])
  22. // .spread(function(C, F) { ... });
  23. // Notes:
  24. // - Use of promises can introduce a small performance overhead;
  25. // - Should not use this for perf-critical operations.
  26. //
  27. loadModules: function(modules) {
  28. var promises = [];
  29. var deferreds = [];
  30. modules.forEach(function() {
  31. var dfd = {};
  32. var promise = new Promise(function(resolve, reject) {
  33. dfd.resolve = resolve;
  34. dfd.reject = reject;
  35. });
  36. deferreds.push(dfd);
  37. promises.push(promise);
  38. });
  39. require = this.require || require;
  40. require(modules, function() {
  41. for (var i = 0; i < arguments.length; i++) {
  42. deferreds[i].resolve(arguments[i]);
  43. }
  44. }, function(err) {
  45. deferreds[0].reject(err);
  46. });
  47. return Promise.all(promises);
  48. }
  49. };
  50. });