IIRC, the aplus spec says to only cache the `then` property if `val` is an object or function