【发布时间】:2020-07-15 11:25:16
【问题描述】:
我正在尝试从 API 服务器获取数据。
async function fetchData() {
const results = await axios(`/api/autotask/config-items/${props.accountID}`);
const contracts = results.data.map(t => axios(`/api/autotask/contract/${t.contractID}`).catch(err => err))
const products = results.data.map(l => axios(`/api/autotask/product/${l.productID}`).catch(err => err))
const subscriptions = results.data.map(s => axios(`/api/autotask/subscription/${s.id}`).catch(err => err))
Promise.all([[...contracts], [...products], [...subscriptions]])
.then(response => {
console.log(response)
})
}
这将首先根据 accountID 获取项目列表。每个项目都有contractID、productID 和id。这些被传递给其他 3 个 Axios GET 调用(合同、产品、订阅)
到目前为止,这是可行的,但是当我使用 Promise.all 时,我将获得 3 个数组,其中包含更多的承诺,而不是实际解析的数据。
(3) [Array(7), Array(7), Array(7)]
0: (7) [Promise, Promise, Promise, Promise, Promise, Promise, Promise]
0: Promise {<fulfilled>: {…}}
1: Promise {<pending>}
2: Promise {<pending>}
3: Promise {<pending>}
4: Promise {<fulfilled>: {…}}
5: Promise {<pending>}
6: Promise {<pending>}
length: 7
__proto__: Array(0)
1: (7) [Promise, Promise, Promise, Promise, Promise, Promise, Promise]
2: (7) [Promise, Promise, Promise, Promise, Promise, Promise, Promise]
length: 3
__proto__: Array(0)
有了这个,我可以访问 response[0]、response[1] 或 response[2],但它会再次获得承诺。
当我尝试传播每个数组Promise.all([**...[...contracts]**, [...products], [...subscriptions]]) 时,它会传播它并且我得到数据但将能够再通过数组访问它。希望这是有道理的。
基本上我想要摆脱的是包含来自 API 的数据的单个数组。过去 2 天我一直在寻找这个,但我哪儿也不去。我看过很多视频和文章,但仍然没有多大意义。我确信我做错了什么,甚至可能采取了完全错误的方法。获得一些见解和一点帮助会很棒。谢谢
【问题讨论】:
标签: javascript ecmascript-6 axios es6-promise