Waarom fixeert underscore-defer zoveel van mijn problemen?

Na een paar weken na het gebruik van de backbone, heb ik me gerealiseerd dat Underscore Deffer eindigde met het vaststellen van veel van de async-problemen waar ik in kwam met betrekking tot het weergeven van verschillende opvattingen.
Kan iemand me alsjeblieft helpen om precies te begrijpen wat Underscore Defer doet en hoe het anders is dat $ .ready () of een ander type wacht op DOM om functies te maken. Wat zijn de neerwaartse zijden van het gebruik ervan?

_.defer = function(func) {
    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
};

Antwoord 1, Autoriteit 100%

# These are equivalent
_.defer(fn);
setTimeout(fn, 1);

Dus deferis gewoon een Milliseconde setTimeout. (het heeft een paar meer gemakseigenschappen, maar die zijn hier niet belangrijk.)


JavaScript heeft looplussen. Het is enkele van schroefdraad voorzien, maar de uitvoering begint en stopt en stopt op basis van evenementen of timers. Telkens wanneer je JS-motor begint om een ​​code uit te voeren, begint het een iteratie van zijn run-lus.

Dus wat deferdoet zegt: “Voer deze code uit in de volgende run lus”.

_.defer(function() { alert('after'); });
alert('before');

Deze waarschuwingen “vóór” en vervolgens “na”. Dit komt omdat de huidige run-lus concludeert welke meldingen “vóór” worden waarschuwt en vervolgens meteen daarna een nieuwe run-lus begint en de code van de waarschuwingen “NA” gebruikt.

Dus op elk gewenst moment dat u hier codeert, maar u wilt dat het een code uitvoert die eerst plaatsvindt na deze code, dan gebruikt u defer.

_.defer(functionToRunLast);
functionToRunFirst();

Dit kan handig zijn met de DOM. Soms verandert u het, maar de wijzigingen ontleden of renderen niet. Aan het einde van de run-lus vangt de browser op en loopt de DOM, vervolgens begint de volgende run-lus en kan communiceren met de nieuw gerenderde DOM.

(precies wat scenario’s veroorzaken, want deze vertraagde DOM-parseer, weet ik het niet zeker, maar ik heb het in mijn eigen projecten in het verleden opgemerkt.)


Het is niet een vervanging voor DOM klaar. De volgende run-lus kan vóór domm ready ooit vuren, verwar deze concepten niet.

Other episodes