code: function resolve(thing, neverForceAsync) {
    if (forceAsync && !neverForceAsync) {
      var deferred = Promise.defer();
      setTimeout(function() {
        Promise.resolve(thing).then(function(resolved) {
          if (typeof resolved === 'function') {
            resolved = resolve(resolved(), neverForceAsync);
          }
  
          deferred.resolve(resolved);
        });
      }, 500);
      return deferred.promise;
    }
  
    return Promise.resolve(thing).then(function(resolved) {
      if (typeof resolved === 'function') {
        return resolve(resolved(), neverForceAsync);
      }
      return resolved;
    });
  }
docs: Both 'lookup' and 'data' properties (see docs on SelectionType constructor)
  in addition to being real data can be a function or a promise, or even a
  function which returns a promise of real data, etc. This takes a thing and
  returns a promise of actual values.