Last active
January 8, 2018 12:31
-
-
Save koohq/504dd62b58547f1010df231f0f0211a8 to your computer and use it in GitHub Desktop.
A snippet to provide utility methods for jQuery's Promise (jQuery.Deferred subset).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* jq-promise.js | |
* | |
* (c) 2018 koohq. Licensed under CC0. | |
* https://creativecommons.org/publicdomain/zero/1.0/legalcode | |
*/ | |
var $Promise = (function($) { | |
function create(func) { | |
var deferred = $.Deferred(); | |
func(deferred.resolve, deferred.reject); | |
return deferred.promise(); | |
} | |
function resolve(value) { | |
return $.Deferred().resolve(value).promise(); | |
} | |
function reject(reason) { | |
return $.Deferred().reject(reason).promise(); | |
} | |
function all($promises) { | |
return $.when.apply($, $promises).then(function() { | |
return Array.prototype.slice.call(arguments); | |
}); | |
} | |
function race($promises) { | |
var deferred = $.Deferred(); | |
$promises.forEach(function($promise) { | |
$promise.then(deferred.resolve, deferred.reject); | |
}); | |
return deferred.promise(); | |
} | |
return { | |
create: create, | |
all: all, | |
race: race, | |
reject: reject, | |
resolve: resolve | |
}; | |
})(jQuery); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* jq-promise.usage.js | |
* | |
* (c) 2017 koohq. Licensed under CC0. | |
* https://creativecommons.org/publicdomain/zero/1.0/legalcode | |
*/ | |
/** $Promise.create **/ | |
// [After] Creates jQuery's Promise by $Promise | |
var promiseA = $Promise.create(function(resolve, reject) { | |
/* | |
if (condition) { | |
resolve(); | |
} else { | |
reject(); | |
} | |
*/ | |
}); | |
// [Before] Creates jQuery's Promise normally | |
var promiseB = (function() { | |
var deferred = $.Deferred(); | |
/* | |
if (condition) { | |
deferred.resolve(); | |
} else { | |
deferred.reject(); | |
} | |
*/ | |
return deferred.promise(); | |
})(); | |
// Creates Promise(Native). $Promise.create's parameter imitates this. | |
var promiseN = new Promise(function(resolve, reject) { | |
/* | |
if (condition) { | |
resolve(); | |
} else { | |
reject(); | |
} | |
*/ | |
}); | |
/** $Promise.resolve **/ | |
var $resolved = $Promise.resolve(1); | |
// Promise.resolve(Native) | |
var resolved = Promise.resolve(1); | |
/** $Promise.reject **/ | |
var $rejected = $Promise.reject('An unexpected error occurred'); | |
// Promise.reject(Native) | |
var rejected = Promise.reject('An unexpected error occurred'); | |
/** $Promise.race **/ | |
var $raced = $Promise.race([$Promise.create(function(resolve, reject) { | |
setTimeout(resolve, 10); | |
}), $rejected]); | |
// Promise.race(Native) | |
var raced = Promise.race([new Promise(function(resolve, reject) { | |
setTimeout(resolve, 10); | |
}), rejected]); | |
/** $Promise.all **/ | |
var $all = $Promise.all([$Promise.create(function(resolve, reject) { | |
setTimeout(resolve, 10); | |
}), $resolved]); | |
// Promise.all(Native) | |
var all = Promise.all([new Promise(function(resolve, reject) { | |
setTimeout(resolve, 10); | |
}), resolved]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment