promise.js
function EnqueueTask ( task, args ) {
    if ( typeof setImmediate === 'function' ) {
      setImmediate(function() {
        task.apply(null, args);
      });
    } else {
      setTimeout(function() {
        task.apply(null, args);
      }, 0);
    }
  }
function EnqueueTask ( task, args ) {
    if ( typeof setImmediate === 'function' ) {
      setImmediate(function() {
        task.apply(null, args);
      });
    } else {
      setTimeout(function() {
        task.apply(null, args);
      }, 0);
    }
  }
8.4.1 EnqueueTask ( queueName, task, arguments) not a real shim, but good enough