()
| 11680 | * @returns {Deferred} Returns a new instance of deferred. |
| 11681 | */ |
| 11682 | var defer = function() { |
| 11683 | var pending = [], |
| 11684 | value, deferred; |
| 11685 | |
| 11686 | deferred = { |
| 11687 | |
| 11688 | resolve: function(val) { |
| 11689 | if (pending) { |
| 11690 | var callbacks = pending; |
| 11691 | pending = undefined; |
| 11692 | value = ref(val); |
| 11693 | |
| 11694 | if (callbacks.length) { |
| 11695 | nextTick(function() { |
| 11696 | var callback; |
| 11697 | for (var i = 0, ii = callbacks.length; i < ii; i++) { |
| 11698 | callback = callbacks[i]; |
| 11699 | value.then(callback[0], callback[1], callback[2]); |
| 11700 | } |
| 11701 | }); |
| 11702 | } |
| 11703 | } |
| 11704 | }, |
| 11705 | |
| 11706 | |
| 11707 | reject: function(reason) { |
| 11708 | deferred.resolve(createInternalRejectedPromise(reason)); |
| 11709 | }, |
| 11710 | |
| 11711 | |
| 11712 | notify: function(progress) { |
| 11713 | if (pending) { |
| 11714 | var callbacks = pending; |
| 11715 | |
| 11716 | if (pending.length) { |
| 11717 | nextTick(function() { |
| 11718 | var callback; |
| 11719 | for (var i = 0, ii = callbacks.length; i < ii; i++) { |
| 11720 | callback = callbacks[i]; |
| 11721 | callback[2](progress); |
| 11722 | } |
| 11723 | }); |
| 11724 | } |
| 11725 | } |
| 11726 | }, |
| 11727 | |
| 11728 | |
| 11729 | promise: { |
| 11730 | then: function(callback, errback, progressback) { |
| 11731 | var result = defer(); |
| 11732 | |
| 11733 | var wrappedCallback = function(value) { |
| 11734 | try { |
| 11735 | result.resolve((isFunction(callback) ? callback : defaultCallback)(value)); |
| 11736 | } catch(e) { |
| 11737 | result.reject(e); |
| 11738 | exceptionHandler(e); |
| 11739 | } |
no test coverage detected