next.js 如何使用getStaticProps获取两次?未将数据推入变量

zvms9eto  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(104)

我从PokeAPI获取数据到我的个人项目,我需要获取两次,首先获取一个口袋妖怪列表,它给予了我一个口袋妖怪名称列表,范围是我指定的,在这种情况下是0到20,然后我Map这些数据来获取这20个口袋妖怪中的每一个的特定数据,但它不起作用。
抓取过程正在工作,如果我设置控制台,我可以在控制台上看到所有内容。log(res),但是我不能将数据推送到products变量中,我应该如何处理呢?

export const getStaticProps: GetStaticProps = async () => {
    let products: any = [];
    const response = await fetch('https://pokeapi.co/api/v2/pokemon?limit=20&offset=0');
    const list = await response.json();

    list.results.map((e: any) => {
        fetch(`https://pokeapi.co/api/v2/pokemon/${e.name}`)
        .then(res => res.json())
        .then(res => {
            products.push(res);
            console.log(e.name);
        })
    })

    
    return {
        props: {products,},
    }
}

我已经尝试过async/await方法,尝试将map Package 到IIFE中,将所有内容 Package 在try/catch中,但没有任何工作,我可以返回第一个fetch(list),但第二个返回空数组。

unftdfkk

unftdfkk1#

RE @Ivanatias说的话
你想先做出所有的承诺,然后等待它们的结果并返回。
我还建议在这里添加一个捕获,以防它们失败。

export const getStaticProps: GetStaticProps = async () => {
    const response = await fetch('https://pokeapi.co/api/v2/pokemon?limit=20&offset=0');
    const list = await response.json();

    const promises = list.results.map((pokemon: any) => {
        return fetch(`https://pokeapi.co/api/v2/pokemon/${pokemon.name}`).then(res => res.json());
    })

    const pokemon = await Promise.all(promises);

    return {
        props: {
            pokemon
        }
    }
}

相关问题