gpt4 book ai didi

svelte - 迭代异步函数导致 slim

转载 作者:行者123 更新时间:2023-12-05 02:10:16 24 4
gpt4 key购买 nike

我正在尝试迭代某个异步函数返回的某个值。

import { onMount } from 'svelte';

let navigation;

onMount(async function(){
navigation = FETCHER.data.navigation;
console.log(navigation);
});

然后在 html 中

{#await navigation}
{#each navigation.main as menuItem}
foobar
{/each}
{/await}

然而“foobar”从未曝光。

在导航中我找到了这个数据结构:

main: (3) […]
0: Object { ID: 16, url: "http://127.0.0.1/", title: "Welcome", … }
1: Object { ID: 15, url: "http://127.0.0.1/", title: "Home", … }
2: Object { ID: 176, url: "http://127.0.0.1/test/", title: "test", … }
length: 3

我真的很好奇为什么 await block 内的任何东西都没有被渲染。我做错了什么 promise 吗?

旁注中的一件事可能很重要:FETCHER.data.navigation 变量是使用 wp_localize_script 从 WordPress 传递的,因此没有任何 fetch 调用。

感谢您提前提出任何意见。

最好的,塞博

最佳答案

await 的正确语法需要 then block :

{#await navigation}
<p>awaiting...</p>
{:then navigation}
{#each navigation.main as menuItem}
foobar
{/each}
{:catch error}
<p>error</p>
{/await}

然而,这取决于 promise 正确解析的事实,并且在异步函数的情况下,需要一个返回值。在此处的代码中,异步函数未返回任何内容,因此无法正确解析。

因此更正 await block 语法并从 promise 返回一个值,以下应该有效:

<script>
import { onMount } from 'svelte';
let promise;
async function fetchStuff() {
return FETCHER.data.navigation;
}
onMount(() => {
promise = fetchStuff();
});
</script>

{#await promise}
<p>
awaiting...
</p>
{:then navigation}
<p>
here access navigation
</p>
{:catch error}
<p>
oh noes.
</p>
{/await}

关于svelte - 迭代异步函数导致 slim ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58923706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com