The executor function runs right away. Call resolve(value) to fulfill, or reject(error) to fail. Here we wrap setTimeout (Phase 10) so callers can use .then instead of raw timer callbacks. Libraries and fetch (later) do this wrapping for you.

Results appear here.

Build a promise with new Promise, then consume it.

Important JavaScript

function delayValue(value, ms) {
  return new Promise(function (resolve) {
    setTimeout(function () {
      resolve(value);
    }, ms);
  });
}

function delayFail(message, ms) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      reject(new Error(message));
    }, ms);
  });
}

delayValue("beep", 800).then(function (msg) {
  console.log(msg);
});