Как из одного компонента после после отправки запроса внутри него вернуть результат промиса (resolve/reject), чтобы в другом компоненте обработать его через then
Ну нужно значит вернуть Promise или Promise.resolve(response). (хотя это что-то сомнительное)
Компоненты при этом могут находиться не рядом и не иметь общего родителя.
Ну, на этот случай есть 2 основных подхода.
1) Глобальное хранилище -
vuex.
1.1) Инициализируете стор
1.2) В компоненте, которому нужны данные - делаете вычисляемое свойство на свойство стора.
1.3) В компоненте, в котором делаете запрос - кладёте в then данные из ответа в стор в соответствующее свойство по средствам экшена(ну или мутации на худой конец). (Одна из практик делать запрос данных в экшене, тогда в экшене по результату выполнения запроса и вызовете мутацию для изменения стора, а в компоненте просто вызовете экшен)
2) Глобальная шина событий
EventBus (считается сомнительным паттерном) - Один компонент подписывается на событие с произвольным именем - второй компонент диспатчит событие с произвольным именем и передаёт полезную нагрузку. В итоге компонент-подписчик в обработчике получит эти данные.
Независимо от подхода, не нужно в компоненте потребителе обрабатывать через then. Компоненты должны реагировать только на изменение поступающих данных, но не на состояние промиса другого компонента.