MCPcopy Create free account
hub / github.com/TruthHun/BookStack / Deferred

Function Deferred

static/webuploader/webuploader.custom.js:261–360  ·  view source on GitHub ↗
( func )

Source from the content-addressed store, hash-verified

259 }
260
261 function Deferred( func ) {
262 var tuples = [
263 // action, add listener, listener list, final state
264 [ 'resolve', 'done', Callbacks( true ), 'resolved' ],
265 [ 'reject', 'fail', Callbacks( true ), 'rejected' ],
266 [ 'notify', 'progress', Callbacks() ]
267 ],
268 state = 'pending',
269 promise = {
270 state: function() {
271 return state;
272 },
273 always: function() {
274 deferred.done( arguments ).fail( arguments );
275 return this;
276 },
277 then: function( /* fnDone, fnFail, fnProgress */ ) {
278 var fns = arguments;
279 return Deferred(function( newDefer ) {
280 $.each( tuples, function( i, tuple ) {
281 var action = tuple[ 0 ],
282 fn = $.isFunction( fns[ i ] ) && fns[ i ];
283
284 // deferred[ done | fail | progress ] for
285 // forwarding actions to newDefer
286 deferred[ tuple[ 1 ] ](function() {
287 var returned;
288
289 returned = fn && fn.apply( this, arguments );
290
291 if ( returned &&
292 $.isFunction( returned.promise ) ) {
293
294 returned.promise()
295 .done( newDefer.resolve )
296 .fail( newDefer.reject )
297 .progress( newDefer.notify );
298 } else {
299 newDefer[ action + 'With' ](
300 this === promise ?
301 newDefer.promise() :
302 this,
303 fn ? [ returned ] : arguments );
304 }
305 });
306 });
307 fns = null;
308 }).promise();
309 },
310
311 // Get a promise for this deferred
312 // If obj is provided, the promise aspect is added to the object
313 promise: function( obj ) {
314
315 return obj != null ? $.extend( obj, promise ) : promise;
316 }
317 },
318 deferred = {};

Callers 1

Calls 2

extendMethod · 0.80
CallbacksFunction · 0.70

Tested by

no test coverage detected