import {set} from "./schedule.js"; | |
export default function() { | |
var on0, on1, that = this, id = that._id, size = that.size(); | |
return new Promise(function(resolve, reject) { | |
var cancel = {value: reject}, | |
end = {value: function() { if (--size === 0) resolve(); }}; | |
that.each(function() { | |
var schedule = set(this, id), | |
on = schedule.on; | |
// If this node shared a dispatch with the previous node, | |
// just assign the updated shared dispatch and we’re done! | |
// Otherwise, copy-on-write. | |
if (on !== on0) { | |
on1 = (on0 = on).copy(); | |
on1._.cancel.push(cancel); | |
on1._.interrupt.push(cancel); | |
on1._.end.push(end); | |
} | |
schedule.on = on1; | |
}); | |
// The selection was empty, resolve end immediately | |
if (size === 0) resolve(); | |
}); | |
} | |