Проблема в том, что вы экспортируете Promise из своего компонента, что просто неправильно.
Вам не нужно ничего менять в самом компоненте. он должен экспортировать объект параметров компонента как обычно, тогда асинхронная оболочка, которую вы взяли из руководства, должна работать как есть:
// MyComponent.vue
<script>
export default {
name: "LoadedCategorySelect",
data() {
return {
categories,
// ...
const AsyncComponent = () => ({
// The component to load (should be a Promise)
component: import('./MyComponent.vue'),
// A component to use while the async component is loading
loading: LoadingComponent,
// A component to use if the load fails
error: ErrorComponent,
// Delay before showing the loading component. Default: 200ms.
delay: 200,
// The error component will be displayed if a timeout is
// provided and exceeded. Default: Infinity.
timeout: 3000
})
В этом и заключается хорошая вещь: компонент не нужно никоим образом менять, чтобы он работал как такой расширенный асинхронный компонент.
Редактировать: В ответ на ваш комментарий:
если вы хотите обернуть загрузку асинхронных данных в это, вы можете - но это не красиво, и я никогда не обнаруживал необходимости делать это, но вы могли бы. важно то, что функция должна возвращать обещание, которое в конечном итоге разрешается для объекта-компонента.
//...
component: () => new Pomise(resolve => {
const aComponent = import('./MyComponent.vue').then(c => c.default)
const aData = fetch()....
Promise.all(aComponent, aDdata).then(([component, data]) => {
// dosomething with data
// then resolve the component:
resolve(component)
})
})