Using promises & setTimeout to make the metadata collection more async and less janky