JSFiddle - React, Tailwind, and code Playground
by Raynos
JavaScript
// promiseMethods. These are the methods you get when you ask for a promise.
// A promise is a "read-only" version
// fullMethods = "then done fail resolve resolveWith reject rejectWith isResolve
isRejected promise cancel".split(" ")
// As you can see it removes resolve/reject so you can't actaully trigger a
// anything on the deferred object, only process callbacks when it "finishes".
promiseMethods = "then done fail isResolved isRejected promise".split(" "),
// Create a simple deferred (one callbacks list)
/* Class: _Deferred.
* methods: done, resolve, resolveWith, isResolved
* internal method: cancel
*
* Basically allows you to attach callbacks with the done method.
* Then resolve the deferred action whenever you want with an argument.
* All the callbacks added with done will be called with the resolved argument
* Any callbacks attached after resolvement will fire immediatly.
*
* resolveWith allows you to set the this scope in the callbacks fired.
*
* isResolved just checks whether it's resolved yet.
*
* cancel blocks resolve/resolveWith from firing. the methods added throug
* done will never be called
*/
_Deferred: function () {
var // callbacks list
callbacks = [],
// stored [ context , args ]
// stores the context & args that .resolve was called with
fired,
// to avoid firing when already doing so
firing,
// flag to know if the deferred has been cancelled
// in Deferred cancel gets called after the first resolve call
cancelled,
// the deferred itself
deferred = {
// done( f1, f2, ...)
done: function () {
if (!cancelled) {
var args = arguments,
i, length,
// elem in callback list
elem,
// type of elem in callback list
type,
// cached context &...