javascript - 如何根据第二个响应用axios更新第一个响应的内容
问题描述
我在 Nuxt.js 中编写了以下操作。
async fetchAllCategoryPosts({ commit }) {
await this.$axios.$get(`${process.env.apiBaseUrl}/posts/categories`).then(res => {
for (const data of res) {
this.$axios.$get(`${process.env.apiBaseUrl}/posts/categories/${data.category_id}`).then(posts =>{
data['posts'] = posts
})
}
console.log(res)
})
}
第一个请求的内容res
如下
[
{ 'category_id': 1 },
{ 'category_id': 4 },
{ 'category_id': 9 },
{ 'category_id': 11 }
]
而且,根据结果,我想发送第二个请求,最后编辑res
如下。
[
{ 'category_id': 1, 'posts': [{object}, {object} ...] },
{ 'category_id': 4 'posts': [{object}, {object} ...] },
{ 'category_id': 9 'posts': [{object}, {object} ...] },
{ 'category_id': 11 'posts': [{object}, {object} ...] }
]
但是,使用上面的代码,结果console.log (res)
并没有随着第一个请求的状态而改变。我们该如何回应?
解决方案
试试下面的代码。由于缺乏环境,我无法对此进行测试,但这应该可以。如果出现错误,请告诉我
async fetchAllCategoryPosts({ commit }) {
this.$axios.$get(`${process.env.apiBaseUrl}/posts/categories`).then(res => {
let newRes = await Promise.all(res.data.map(async (data) => await this.$axios
.$get(`${process.env.apiBaseUrl}/posts/categories/${data.category_id}`)
.then(posts => ({...data, posts}));
console.log(newRes);
})
}
推荐阅读
- python - Python:当两个数据框在两个不同的列中共享一个公共值时,返回整行
- c++ - 无法在网络摄像头视频 OpenCV C++ 上绘制矩形
- laravel - Laravel 8 登录尝试与 Fortify 429 TOO MANY REQUESTS
- docker - 我的私人仓库的 docker 注册表是什么?
- c++ - 多个子目录上的 Makefile 模式规则
- visual-studio-code - 增加或减少终端窗口宽度的 VS 代码快捷键
- algorithm - 最小面积边界矩形包含凸包的最小距离轨迹
- python-3.x - 仅当按下另一个切换按钮时,如何让切换按钮停止被“向下”按下
- sql - 如何在 Big Query 中过滤一系列 IP
- openssl - EVP_DecryptFinal_ex:尝试解密使用密钥和 IV 加密的数据时出现错误的解密错误