src/async.js
function _drainQueueStep(queue) {
    var fn = queue.shift();
    if (typeof fn !== "function") {
        fn._settlePromises();
    } else {
        var receiver = queue.shift();
        var arg = queue.shift();
        fn.call(receiver, arg);
    }
}
function _drainQueueStep(queue) {
    var fn = queue.shift();
    if (typeof fn !== "function") {
        fn._settlePromises();
    } else {
        var receiver = queue.shift();
        var arg = queue.shift();
        fn.call(receiver, arg);
    }
}
function _drainQueueStep ( queue ) { var fn = queue . shift ( ) ; if ( typeof fn !== "function" ) { fn . _settlePromises ( ) ; } else { var receiver = queue . shift ( ) ; var arg = queue . shift ( ) ; fn . call ( receiver , arg ) ; } }
Shift the queue in a separate function to allow garbage collection after each step
Shift the queue in a separate function to allow garbage collection after each step