Просто чтобы объяснить, почему onMount
не может быть функцией async
(это может измениться в будущем, но не ожидайте этого):
Вы можете вернуть функция из обработчика onMount
, которая вызывается при уничтожении компонента. Но функции async
могут возвращать только обещание . Поскольку обещание не является функцией, Svelte проигнорирует возвращаемое значение.
Это то же самое, что useEffect
в React, кстати - функция должна быть синхронной, чтобы избежать состояния гонки. Рекомендуемое решение для onMount
такое же, как для useEffect
- поместите async
функцию внутри обработчика:
onMount(() => {
async function foo() {
bar = await baz();
}
foo();
return () => console.log('destroyed');
});
(обратите внимание, что вы несете ответственность за обработку любые состояния гонки, возникающие в результате уничтожения компонента до разрешения обещания, хотя назначение состояния внутри уничтоженного компонента безвредно.)
Я открыл проблему, чтобы обсудить предоставление более полезной обратной связи в этих ситуациях : https://github.com/sveltejs/svelte/issues/4944