нет возврата из асинхронной c операции в компоненте - PullRequest
0 голосов
/ 27 марта 2020

У меня есть следующий код в компоненте входа:

function auth(opts){
  return axios(opts).then(response => response.data)
}
auth(opts).then(data=> isLogged.set('assets'))

Основное приложение:

$: currComponent = isLogged=='assets' ? Assets : null

<Login />
<svelte:component this={currComponent} />

По какой-то причине Svelte не ждет, пока обещание будет выполнено.

Однако, если я переместу isLogged.set('assets') за пределы обещания:

Api.auth(opts).then(data=> console.log(data))

isLogged.set('assets')

результат обещания возвращается и компонент монтируется. Что я делаю не так?

1 Ответ

1 голос
/ 27 марта 2020

Svelte не будет ждать конца вашего обещания, чтобы работать и быть установленным. Хорошо отметить, что Svelte не обнаруживает изменения в переменной, когда вы используете функцию или метод. Вы должны переназначить их. Поэтому, если мы попытаемся воспроизвести ваш код и исправить его:

<script>

    import Login from './Login.svelte';
    import Assets from './Assets.svelte';

    let isLogged;

    $: currComponent = isLogged == 'assets' ? Assets : null;

    Api.auth(opts).then(data=> {
        isLogged = 'assets';
    })

</script>

<Login />
<svelte:component this={currComponent} />

Другой вариант будет использовать блок ожидания

...