私が必要なのは、Svelte onMount()
で_async-await
_を使用することです。
または、何が問題で何が代わりに使用できるかを提案していただけますか?
再現するには
"Mounting..."
_および_"A lot of background work..."
_なぜ?
onMount()
はasync
関数の約束を認識しましたか?よろしいですか?
async
コンポーネントをレンダリングする前にfunction lazyLoading()
を待つ必要があるため、Child
の動作が必要です。
Svelteでこれを行う別の方法はありますか?
onMount
がasync
関数にならない理由を説明するだけです(これは可能性があります将来的に変更されますが、 tはそれを期待します):
コンポーネントが破棄されたときに呼び出されるonMount
ハンドラーから関数を返すことができます。ただし、async
関数はpromiseのみを返すことができます。 promiseは関数ではないため、Svelteは戻り値を無視します。
これは、ちなみに、ReactのuseEffect
と同じです。競合状態を回避するために、関数は同期している必要があります。 onMount
の推奨される解決策は、useEffect
の場合と同じです。async
関数を配置しますinsideハンドラー:
onMount(() => {
async function foo() {
bar = await baz();
}
foo();
return () => console.log('destroyed');
});
(promiseが解決する前にコンポーネントが破棄された結果として発生した競合状態を処理する責任はユーザーにあることに注意してください。ただし、破棄されたコンポーネント内に状態を割り当てることは無害です。)
これらの状況でより有用なフィードバックを提供することを議論するために問題をオープンしました: https://github.com/sveltejs/svelte/issues/4944