lie.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Promise = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
  2. (function (global){
  3. 'use strict';
  4. var Mutation = global.MutationObserver || global.WebKitMutationObserver;
  5. var scheduleDrain;
  6. {
  7. if (Mutation) {
  8. var called = 0;
  9. var observer = new Mutation(nextTick);
  10. var element = global.document.createTextNode('');
  11. observer.observe(element, {
  12. characterData: true
  13. });
  14. scheduleDrain = function () {
  15. element.data = (called = ++called % 2);
  16. };
  17. } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
  18. var channel = new global.MessageChannel();
  19. channel.port1.onmessage = nextTick;
  20. scheduleDrain = function () {
  21. channel.port2.postMessage(0);
  22. };
  23. } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
  24. scheduleDrain = function () {
  25. // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
  26. // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
  27. var scriptEl = global.document.createElement('script');
  28. scriptEl.onreadystatechange = function () {
  29. nextTick();
  30. scriptEl.onreadystatechange = null;
  31. scriptEl.parentNode.removeChild(scriptEl);
  32. scriptEl = null;
  33. };
  34. global.document.documentElement.appendChild(scriptEl);
  35. };
  36. } else {
  37. scheduleDrain = function () {
  38. setTimeout(nextTick, 0);
  39. };
  40. }
  41. }
  42. var draining;
  43. var queue = [];
  44. //named nextTick for less confusing stack traces
  45. function nextTick() {
  46. draining = true;
  47. var i, oldQueue;
  48. var len = queue.length;
  49. while (len) {
  50. oldQueue = queue;
  51. queue = [];
  52. i = -1;
  53. while (++i < len) {
  54. oldQueue[i]();
  55. }
  56. len = queue.length;
  57. }
  58. draining = false;
  59. }
  60. module.exports = immediate;
  61. function immediate(task) {
  62. if (queue.push(task) === 1 && !draining) {
  63. scheduleDrain();
  64. }
  65. }
  66. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  67. },{}],2:[function(_dereq_,module,exports){
  68. 'use strict';
  69. var immediate = _dereq_(1);
  70. /* istanbul ignore next */
  71. function INTERNAL() {}
  72. var handlers = {};
  73. var REJECTED = ['REJECTED'];
  74. var FULFILLED = ['FULFILLED'];
  75. var PENDING = ['PENDING'];
  76. module.exports = Promise;
  77. function Promise(resolver) {
  78. if (typeof resolver !== 'function') {
  79. throw new TypeError('resolver must be a function');
  80. }
  81. this.state = PENDING;
  82. this.queue = [];
  83. this.outcome = void 0;
  84. if (resolver !== INTERNAL) {
  85. safelyResolveThenable(this, resolver);
  86. }
  87. }
  88. Promise.prototype["finally"] = function (callback) {
  89. if (typeof callback !== 'function') {
  90. return this;
  91. }
  92. var p = this.constructor;
  93. return this.then(resolve, reject);
  94. function resolve(value) {
  95. function yes () {
  96. return value;
  97. }
  98. return p.resolve(callback()).then(yes);
  99. }
  100. function reject(reason) {
  101. function no () {
  102. throw reason;
  103. }
  104. return p.resolve(callback()).then(no);
  105. }
  106. };
  107. Promise.prototype["catch"] = function (onRejected) {
  108. return this.then(null, onRejected);
  109. };
  110. Promise.prototype.then = function (onFulfilled, onRejected) {
  111. if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||
  112. typeof onRejected !== 'function' && this.state === REJECTED) {
  113. return this;
  114. }
  115. var promise = new this.constructor(INTERNAL);
  116. if (this.state !== PENDING) {
  117. var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
  118. unwrap(promise, resolver, this.outcome);
  119. } else {
  120. this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
  121. }
  122. return promise;
  123. };
  124. function QueueItem(promise, onFulfilled, onRejected) {
  125. this.promise = promise;
  126. if (typeof onFulfilled === 'function') {
  127. this.onFulfilled = onFulfilled;
  128. this.callFulfilled = this.otherCallFulfilled;
  129. }
  130. if (typeof onRejected === 'function') {
  131. this.onRejected = onRejected;
  132. this.callRejected = this.otherCallRejected;
  133. }
  134. }
  135. QueueItem.prototype.callFulfilled = function (value) {
  136. handlers.resolve(this.promise, value);
  137. };
  138. QueueItem.prototype.otherCallFulfilled = function (value) {
  139. unwrap(this.promise, this.onFulfilled, value);
  140. };
  141. QueueItem.prototype.callRejected = function (value) {
  142. handlers.reject(this.promise, value);
  143. };
  144. QueueItem.prototype.otherCallRejected = function (value) {
  145. unwrap(this.promise, this.onRejected, value);
  146. };
  147. function unwrap(promise, func, value) {
  148. immediate(function () {
  149. var returnValue;
  150. try {
  151. returnValue = func(value);
  152. } catch (e) {
  153. return handlers.reject(promise, e);
  154. }
  155. if (returnValue === promise) {
  156. handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));
  157. } else {
  158. handlers.resolve(promise, returnValue);
  159. }
  160. });
  161. }
  162. handlers.resolve = function (self, value) {
  163. var result = tryCatch(getThen, value);
  164. if (result.status === 'error') {
  165. return handlers.reject(self, result.value);
  166. }
  167. var thenable = result.value;
  168. if (thenable) {
  169. safelyResolveThenable(self, thenable);
  170. } else {
  171. self.state = FULFILLED;
  172. self.outcome = value;
  173. var i = -1;
  174. var len = self.queue.length;
  175. while (++i < len) {
  176. self.queue[i].callFulfilled(value);
  177. }
  178. }
  179. return self;
  180. };
  181. handlers.reject = function (self, error) {
  182. self.state = REJECTED;
  183. self.outcome = error;
  184. var i = -1;
  185. var len = self.queue.length;
  186. while (++i < len) {
  187. self.queue[i].callRejected(error);
  188. }
  189. return self;
  190. };
  191. function getThen(obj) {
  192. // Make sure we only access the accessor once as required by the spec
  193. var then = obj && obj.then;
  194. if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {
  195. return function appyThen() {
  196. then.apply(obj, arguments);
  197. };
  198. }
  199. }
  200. function safelyResolveThenable(self, thenable) {
  201. // Either fulfill, reject or reject with error
  202. var called = false;
  203. function onError(value) {
  204. if (called) {
  205. return;
  206. }
  207. called = true;
  208. handlers.reject(self, value);
  209. }
  210. function onSuccess(value) {
  211. if (called) {
  212. return;
  213. }
  214. called = true;
  215. handlers.resolve(self, value);
  216. }
  217. function tryToUnwrap() {
  218. thenable(onSuccess, onError);
  219. }
  220. var result = tryCatch(tryToUnwrap);
  221. if (result.status === 'error') {
  222. onError(result.value);
  223. }
  224. }
  225. function tryCatch(func, value) {
  226. var out = {};
  227. try {
  228. out.value = func(value);
  229. out.status = 'success';
  230. } catch (e) {
  231. out.status = 'error';
  232. out.value = e;
  233. }
  234. return out;
  235. }
  236. Promise.resolve = resolve;
  237. function resolve(value) {
  238. if (value instanceof this) {
  239. return value;
  240. }
  241. return handlers.resolve(new this(INTERNAL), value);
  242. }
  243. Promise.reject = reject;
  244. function reject(reason) {
  245. var promise = new this(INTERNAL);
  246. return handlers.reject(promise, reason);
  247. }
  248. Promise.all = all;
  249. function all(iterable) {
  250. var self = this;
  251. if (Object.prototype.toString.call(iterable) !== '[object Array]') {
  252. return this.reject(new TypeError('must be an array'));
  253. }
  254. var len = iterable.length;
  255. var called = false;
  256. if (!len) {
  257. return this.resolve([]);
  258. }
  259. var values = new Array(len);
  260. var resolved = 0;
  261. var i = -1;
  262. var promise = new this(INTERNAL);
  263. while (++i < len) {
  264. allResolver(iterable[i], i);
  265. }
  266. return promise;
  267. function allResolver(value, i) {
  268. self.resolve(value).then(resolveFromAll, function (error) {
  269. if (!called) {
  270. called = true;
  271. handlers.reject(promise, error);
  272. }
  273. });
  274. function resolveFromAll(outValue) {
  275. values[i] = outValue;
  276. if (++resolved === len && !called) {
  277. called = true;
  278. handlers.resolve(promise, values);
  279. }
  280. }
  281. }
  282. }
  283. Promise.race = race;
  284. function race(iterable) {
  285. var self = this;
  286. if (Object.prototype.toString.call(iterable) !== '[object Array]') {
  287. return this.reject(new TypeError('must be an array'));
  288. }
  289. var len = iterable.length;
  290. var called = false;
  291. if (!len) {
  292. return this.resolve([]);
  293. }
  294. var i = -1;
  295. var promise = new this(INTERNAL);
  296. while (++i < len) {
  297. resolver(iterable[i]);
  298. }
  299. return promise;
  300. function resolver(value) {
  301. self.resolve(value).then(function (response) {
  302. if (!called) {
  303. called = true;
  304. handlers.resolve(promise, response);
  305. }
  306. }, function (error) {
  307. if (!called) {
  308. called = true;
  309. handlers.reject(promise, error);
  310. }
  311. });
  312. }
  313. }
  314. },{"1":1}]},{},[2])(2)
  315. });