javascript - 如何使用 promise.all 获取多个 api?
问题描述
我一直在解决这个编码挑战,但现在我有点卡住了。我不确定我是否理解挑战。
这是挑战您的目标是创建一个显示酒店及其房间列表的页面。
查询以下 API:
https://obmng.dbm.guestline.net/api/hotels?collection-id=OBMNG
这将返回带有 ID 的酒店列表。Id 可用于查询此查询的房间类型:
https://obmng.dbm.guestline.net/api/roomRates/OBMNG/[hotelId]例如https://obmng.dbm.guestline.net/api/roomRates/OBMNG/OBMNG1
我该怎么办?我读了一些关于 Promise.all 的东西——这是我在这里需要的吗?
我有类似的东西,但不确定下一步
async componentDidMount () {
const url = "https://obmng.dbm.guestline.net/api/roomRates/OBMNG/OBMNG1";
const urlSecond = "https://obmng.dbm.guestline.net/api/hotels?collection-id=OBMNG";
const response = await fetch(url);
const response = await fetch (urlSecond);
const data = await response.json();
const data = await response.json();
this.setState({hotel:data.rooms[0], loading: false});
this.setState({hotel:data, loading:false});
console.log(data.rooms[0]);
console.log(data);
让我知道我应该做什么-谢谢
解决方案
您要做的是首先获取酒店,然后为每个酒店发送房间信息请求。你会看到我们最终会得到一个最终的对象数组。数组中的每个索引都有一个hotel
包含酒店信息的键,然后是一个包含该酒店rooms
所有房间信息的键。
这是一个有效的代码框。
import { useEffect, useState } from 'react'
export default function App() {
const [hotelRooms, setHotelRooms] = useState([])
const fetchHotels = async () => {
const res = await fetch('https://obmng.dbm.guestline.net/api/hotels?collection-id=OBMNG')
const hotels = await res.json()
const hotelRooms = []
for(const hotel of hotels) {
const res = await fetch(`https://obmng.dbm.guestline.net/api/roomRates/OBMNG/${hotel.id}`)
const info = await res.json()
hotelRooms.push({ hotel, rooms: info.rooms })
}
setHotelRooms(hotelRooms)
}
useEffect(() => {
fetchHotels()
}, [])
return (
<div className="App">
{
hotelRooms.map(h => (
<div>
<h2>{h.hotel.name}</h2>
<p>{h.hotel.description}</p>
<p style={{ fontWeight: 'bold' }}>Rooms:</p>
{
h.rooms.map(room => (
<div>
<div>- {room.name}</div>
</div>
))
}
</div>
))
}
</div>
);
}
推荐阅读
- curve-fitting - 如何使用点数组执行曲线拟合并触摸该数组中的特定点
- sql - 计算特定列在不同列中有多少不同的值
- amazon-dynamodb - DynamoDb 对使用 cloudformation 的多个表重新使用 ScalableTarget
- django - 代理模型 DRF/DJANGO 的序列化程序出现问题
- java - 具有单线程的 Java 线程池未按预期运行
- ruby - 第二列中 NMatrix 矩阵的水平串联不正确
- html - 如何在页面重新加载时保持选定的手风琴处于活动状态
- async-await - 使用期货从套接字列表中选择
- facebook - 为一个 Facebook 应用程序使用多个不同的域
- php - 支持mysql的php动态复选框