feat(promises): properly propagate errors