javascript await函数返回未定义[重复]

ckx4rj1h  于 2023-01-08  发布在  Java
关注(0)|答案(2)|浏览(130)
    • 此问题在此处已有答案**:

Waiting for the fetch to complete and then execute the next instruction(2个答案)
How can I return the fetch API results from a function?(5个答案)
昨天关门了。
我的目标是"暂停"* EventListener * 函数,以便通过调用另一个函数(* getCategoriesIDs *)来完成一些工作,该函数返回一个值,我将使用该值继续执行 * EventListener * 函数。
当我在执行后记录 * categoriesIDtoNameMapped * 时,它显示为UNDEFINED。
会非常感激你的帮助。

form.addEventListener("submit", async (e) => {

//do something

try {
    let categoriesIDtoNameMapped = await getCategoriesIDs()
    console.log(categoriesIDtoNameMapped)
} catch (err) {
    console.log(err)
}
            
//do something with the categoriesIDtoNameMapped

}

function getCategoriesIDs() {
    fetch('http://localhost:1337/api/categories', {
        method: 'GET',
        headers: {
            'Content-type': 'application/json',
            Authorization: `Bearer ${JWT_TOKEN}`
        }
    })
    .then((response) => {
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
        return response.json();
    })
    .then((response) => {
        const categoriesIDtoNameMapped = {}
        for (let i = 0; i < response.data.length; i++) {
            categoriesIDtoNameMapped[response.data[i].id] = response.data[i].attributes.name
        }
        return new Promise(resolve => {
            resolve(categoriesIDtoNameMapped)
        });
    });
}
wydwbb8l

wydwbb8l1#

塞巴斯蒂安Simon指出了这个问题。getCategoriesIDs没有返回任何东西,因为return语句在.then中,并且函数没有返回任何东西,解决方案:

function getCategoriesIDs() {
    const categoriesIDtoNameMapped = {}
    fetch('http://localhost:1337/api/categories', {
        method: 'GET',
        headers: {
            'Content-type': 'application/json',
            Authorization: `Bearer ${JWT_TOKEN}`
        }
    })
    .then((response) => {
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
        return response.json();
    })
    .then((response) => {        
        for (let i = 0; i < response.data.length; i++) {
            categoriesIDtoNameMapped[response.data[i].id] = response.data[i].attributes.name
        }
    });
    return categoriesIDtoNameMapped 
}
fkaflof6

fkaflof62#

getCategoriesIDs需要是一个异步函数,以便您等待它上面的内容。
要解决这个问题,您需要将getCategoriesIDs作为异步函数,并使用wait进行获取

async function getCategoriesIDs() {
    const response = await fetch('http://localhost:1337/api/categories', {
        method: 'GET',
        headers: {
            'Content-type': 'application/json',
            Authorization: `Bearer ${JWT_TOKEN}`
        }
    })
    if (!response.ok) {
        throw new Error(`HTTP error! Status: ${response.status}`);
    }
    const responseJson = await response.json();
    const categoriesIDtoNameMapped = {}
        for (let i = 0; i < response.data.length; i++) {
            categoriesIDtoNameMapped[responseJson.data[i].id] = response.data[i].attributes.name
        }
    return categoriesIDtoNameMapped;
}

相关问题