截至 Svelte 5.36,您可以在组件中三个之前不可用的位置使用`await`关键字: * 在组件的最高级别中 `脚本` * 内部 `$derived(...)` 声明 * 在您的标记内 此功能目前处于实验阶段,您必须通过添加 `experimental.async` 选项来启用,通常在您 [配置](/docs/kit/configuration) Svelte 时进行,通常在 `svelte.config.js` 中: ```js /// file: svelte.config.js export default { compilerOptions: { experimental: { async: true } } }; ``` 实验标志将在 Svelte 6 中移除。 ## 边界 当前,您只能在具有 `await` 的 [``](svelte-boundary) 内部使用一个 `pending` 片段: ```svelte {#snippet pending()}

loading...

{/snippet}
``` 此限制将在 Svelte 支持异步服务器端渲染后解除(见[注意事项](#Caveats))。 > \[!注意\] 在[沙盒](/playground)中,您的应用在一个带有空挂起代码片段的边界内渲染,这样您就可以使用`await`而无需创建一个。 ## 同步更新 當一個`await`表達式依賴於特定的狀態時,該狀態的變化將不會在 UI 中反應,直到異步操作完成,這樣 UI 就不會處於不一致的狀態。換句話說,在像[這個](/playground/untitled#H4sIAAAAAAAAE42QsWrDQBBEf2VZUkhYRE4gjSwJ0qVMkS6XYk9awcFpJe5Wdoy4fw-ycdykSPt2dpiZFYVGxgrf2PsJTlPwPWTcO-U-xwIH5zli9bminudNtwEsbl-v8_wYj-x1Y5Yi_8W7SZRFI1ZYxy64WVsjRj0rEDTwEJWUs6f8cKP2Tp8vVIxSPEsHwyKdukmA-j6jAmwO63Y1SidyCsIneA_T6CJn2ZBD00Jk_XAjT4tmQwEv-32eH6AsgYK6wXWOPPTs6Xy1CaxLECDYgb3kSUbq8p5aaifzorCt0RiUZbQcDIJ10ldH8gs3K6X2Xzqbro5zu1KCHaw2QQPrtclvwVSXc2sEC1T-Vqw0LJy-ClRy_uSkx2ogHzn9ADZ1CubKAQAA)...這樣的例子中。 ```svelte

{a} + {b} = {await add(a, b)}

``` ...如果您增加`a`,则`

`的内容将*不会*立即更新为读取此内容— `2 + 2 = 3` — 相反,当 `add(a, b)` 解析时,文本将更新为 `2 + 2 = 4`。 更新可以重叠——快速更新将在用户界面中反映出来,而较早的慢速更新仍在进行中。 ## 并发 Svelte 会尽可能并行地执行异步操作。例如,如果你在标记中有两个`await`表达式... ```svelte

{await one()}

{await two()}

``` ...两个函数将同时运行,因为它们是独立的表达式,尽管它们在视觉上是连续的。 这不适用于您代码中的 `await` 表达式,也不适用于 `