reactjs - 在 UseEffect 中为两个 API 调用设置 Promise
问题描述
const [activities, setActivities] = useState([""]);
const [contact, setContact] = useState();
const currentActivity = activities[0]
let contactId = currentActivity.contacts
useEffect(() => {
API.getActivities()
.then(res =>
setActivities(res.data)
).catch((err) => console.log(err))
API.getContact(contactId)
.then(res =>
setActivities(res.data)
).catch((err) => console.log(err))
}, []);
console.log(currentActivity)
console.log(contactId)
console.log(contact)
第一次调用设置包含联系人 ID 的活动状态。我需要 id 来运行第二次呼叫以获取联系信息。我相信我需要设定一个承诺,但我被卡住了。当我运行代码时,联系人 ID 没有及时返回以拉取联系人。另一种解决方案可能是调用所有联系人并循环以匹配联系人返回的 id。当我尝试过时,“联系人”状态也返回未定义。
解决方案
让我知道这是否有帮助。我还没有测试过,可能需要做一些小改动。
useEffect(async() => {
const resActivities=await API.getActivities()
setActivities(resActivities.data)
const promises=resActivities.data.map(item=>API.getContact(item.contactId)) // assuming contactId property exists
const resp=await Promises.all(promises)
setContact(resp.flat())
}, []);
推荐阅读
- pdf - itext 7 PDFA1B 转换成功,但 Acrbat DC compaints “子集字体中的 CIDSet 缺失”
- javascript - 传单未捕获类型错误:无法读取未定义的属性“长度”且未定义标记簇
- reactjs - 创建新资源的良好 URI 设计是什么?
- javascript - 在 Javascript 类中声明和访问变量
- firebase - 从新的 firebase auth 模拟器中删除所有用户
- jenkins - 如何在詹金斯管道中创建新凭据
- python - Azure devops 管道缓存 python 依赖项
- python - Python pandas 数据框打印 ValueError:无法将字符串转换为浮点数:'1,971.25'
- javascript - 制作一个 for 循环来计算特定单元格,然后将结果写入行中的最后一个单元格
- angular - 如何在 http 请求 URL 中使用 Observable?