javascript - 如何使用带有异步获取的for循环返回数组
问题描述
我正在尝试从 fetch 请求中创建一组响应,但我不确定我在循环中放置的 await 哪里出了问题。console.log(response)
给出 TypeError: undefined is not an object,当我尝试时,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®ion=sg"
);
let response = await resp[0]["routes"][0]["legs"][0]["steps"]
console.log(response);
result.push(response);
}
return result
};
解决方案
代替:
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]
部分将失败。
推荐阅读
- android - 滚动 RecyclerView Android 后如何找出焦点所在的项目?
- selenium - 错误 org.openqa.selenium.WebDriverException:未知错误:使用 Java 调用函数结果缺少“值”
- python - arima.predict() 和 arima.forecast() 的区别
- ios - 如何在不使用约束的情况下确保 uiview 在不同的 ipad 中看起来相同
- javascript - Reactjs 不渲染表中的数据
- angular - 我添加 { 提供:HTTP_INTERCEPTOR .....} 时的 NativeScript exaption
- c# - 有时拍摄的照片不是从设备获取的
- wordpress - 我无法使用 wp_remote_post 在 WordPress 上实现 Twilio 发送短信
- javascript - 除非调整屏幕大小,否则悬停时的滚动功能将不起作用
- c++ - 在 Windows7 上使用 CMake 将 C++ 源代码构建为带有“MinGW Makefile”生成器的库