_chainOrCall(promise, fn) {
    // thenable
    if (promise && promise.then && typeof promise.then === 'function') {
      // already have a promise, chain callback
      return promise.then(() => fn());
    }
    // callback might return a promise
    return fn();
  }
Once we have a promise we chain, but call synchronously until then.

@param {(Promise|undefined)} promise
@param {Function} fn
@return {(Promise|undefined)}
@private