如何使用带有内部异步获取的for循环返回数组

时间:2020-07-05 15:34:50

标签: javascript reactjs async-await

我正在尝试从获取请求中创建响应数组,但不确定在循环中出现问题的地方。 console.log(response)给出TypeError:undefined不是一个对象,当我尝试console.log(resp)时,我得到一个console.error

const routesArray = async (userLocation, arr) => {
    let result = [];
    let temp = [];
    temp.push(userLocation);
    const updated = temp.concat(arr);


    let origin = updated[0].lat + "," + updated[0].long;
    let destination = updated[updated.length - 1];
    for (let i = 0; i < updated.length; i++) {
        let resp = await fetch(
            "https://maps.googleapis.com/maps/api/directions/json?origin=" +
                origin +
                "&destination=" +
                destination +
                "&key=" +
                GOOGLE_MAPS_API_KEY +
                "&mode=transit&region=sg"
        );
        let response = await resp[0]["routes"][0]["legs"][0]["steps"]
        console.log(response);
        result.push(response);
    }
    return result
};

1 个答案:

答案 0 :(得分:3)

替换:

await resp[0]["routes"][0]["legs"][0]["steps"]

使用

(await resp.json())[0]["routes"][0]["legs"][0]["steps"]

或者为什么不呢?

(await resp.json())[0].routes[0].legs[0].steps

这是必需的,因为resp是一个响应对象,它尚未公开数据。为此,您必须调用其异步方法之一,例如json(),该方法将返回它们自己的承诺。

顺便说一句:您得到的错误不在console.log(response)上,而是在上一行。

如果仍然出现错误,请确保按预期结构化数据:

console.log(JSON.stringify(await resp.json()));

这将向您显示数据。确保它是一个数组。如果不是这样,则将需要对代码进行相应的修改,因为[0]部分将失败。