Skip to content

Instantly share code, notes, and snippets.

@koohq
Last active January 8, 2018 12:31
Show Gist options
  • Save koohq/504dd62b58547f1010df231f0f0211a8 to your computer and use it in GitHub Desktop.
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).
/**
* 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);
/**
* 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