Fix async switches (#110)
If any switches are async, the subsequent code will execute before the switches are finished. This PR moves all that code to a new function, and debounces the calls to onSwitch() so it only executes once, after all the switches finish. Fizes #72.
This commit was merged in pull request #110.
This commit is contained in:
@@ -3,6 +3,8 @@ var forEachEls = require("./foreach-els")
|
||||
var defaultSwitches = require("./switches")
|
||||
|
||||
module.exports = function(switches, switchesOptions, selectors, fromEl, toEl, options) {
|
||||
var switchesQueue = [];
|
||||
|
||||
selectors.forEach(function(selector) {
|
||||
var newEls = fromEl.querySelectorAll(selector)
|
||||
var oldEls = toEl.querySelectorAll(selector)
|
||||
@@ -24,12 +26,18 @@ module.exports = function(switches, switchesOptions, selectors, fromEl, toEl, op
|
||||
if (this.log) {
|
||||
this.log("newEl", newEl, "oldEl", oldEl)
|
||||
}
|
||||
if (switches[selector]) {
|
||||
switches[selector].bind(this)(oldEl, newEl, options, switchesOptions[selector])
|
||||
}
|
||||
else {
|
||||
defaultSwitches.outerHTML.bind(this)(oldEl, newEl, options)
|
||||
}
|
||||
|
||||
var callback = (switches[selector]) ?
|
||||
switches[selector].bind(this, oldEl, newEl, options, switchesOptions[selector]) :
|
||||
defaultSwitches.outerHTML.bind(this, oldEl, newEl, options)
|
||||
|
||||
switchesQueue.push(callback)
|
||||
}, this)
|
||||
}, this)
|
||||
|
||||
this.state.numPendingSwitches = switchesQueue.length
|
||||
|
||||
switchesQueue.forEach(function(queuedSwitch) {
|
||||
queuedSwitch()
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user