我正在尝试迭代某个异步函数返回的某个值。
import { onMount } from 'svelte';
let navigation;
onMount(async function(){
navigation = FETCHER.data.navigation;
console.log(navigation);
});
Run Code Online (Sandbox Code Playgroud)
然后在 html
{#await navigation}
{#each navigation.main as menuItem}
foobar
{/each}
{/await}
Run Code Online (Sandbox Code Playgroud)
然而“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
Run Code Online (Sandbox Code Playgroud)
我真的很好奇为什么 await 块内的任何东西都没有呈现。我的承诺有问题吗?
旁注中的一件事可能很重要:FETCHER.data.navigation 变量是使用 wp_localize_script 从 WordPress 传递的,因此没有任何 fetch 调用。
感谢您提前提供任何意见。
最好的,塞博
await需要then 块的正确语法:
{#await navigation}
<p>awaiting...</p>
{:then navigation}
{#each navigation.main as menuItem}
foobar
{/each}
{:catch error}
<p>error</p>
{/await}
Run Code Online (Sandbox Code Playgroud)
然而,这取决于承诺正确解析的事实,并且在异步函数的情况下,需要返回值。在这里的代码中,异步函数没有返回任何内容,这将无法正确解析。
因此,纠正 await 块语法并从承诺中返回一个值,以下应该有效:
<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}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
934 次 |
| 最近记录: |