考虑一下我具有以下发出GET请求的代码;
const [
{data: a},
{data: b},
{data: c},
{data: d}
] = await Promise.all([
axios.get('https://api.somesite.org/a.json'),
axios.get('https://api.somesite.org/b.json'),
axios.get('https://api.somesite.org/c.json'),
axios.get('https://api.somesite.org/d.json')
]);
现在,由于它是通过axios进行的,所以我认为响应将始终是完整响应,对于Promise.all,我们将获得一系列类似于以下内容的响应;
[{
data: {
"a1": "1",
"a11": "11"
},
headers: {},
status: 200
}, {
data: {
"b2": "2",
"b22": "22"
},
headers: {},
status: 200
}, {
data: {
"c3": "3",
"c33": "33"
},
headers: {},
status: 200
}, {
data: {
"d4": "4",
"d44": "44"
},
headers: {},
status: 200
}
]
现在,这是我认为对代码进行评估的方式(我只需要在以下步骤序列中进行确认);
首先执行数组解构语法,这意味着对于数组中的第一项,将对其进行分配。因此,实际上我们应该获得如下分配的第一个数组元素;
{data: a} = {
data: {
"a1": "1",
"a11": "11"
},
headers: {},
status: 200
}
其他3个数组元素发生相同的事情
下一步将是解构语法执行的对象。因此,从右侧对象开始,它将提取“数据”属性值并将其分配给别名“ a”
因此,实际上,变量“ a”应按以下方式分配对象;
{
"a1": "1",
"a11": "11"
}
请让我知道我对上述代码执行顺序的理解是否正确。
data is an array with objects
{
data: [{
"a1": "1",
"a11": "11"
},
headers: {},
status: 200
}], {
data:[ {
"b2": "2",
"b22": "22"
},
headers: {},
status: 200
}], {
data: [{
"c3": "3",
"c33": "33"
},
headers: {},
status: 200
}], {
data: [{
"d4": "4",
"d44": "44"
},
headers: {},
status: 200
}]
}
解构后,您将获得数据内容
[{
"a1": "1",
"a11": "11"
},
headers: {},
status: 200
}],[ {
"b2": "2",
"b22": "22"
},
headers: {},
status: 200
}],
[{
"c3": "3",
"c33": "33"
},
headers: {},
status: 200
}],
[{
"d4": "4",
"d44": "44"
},
headers: {},
status: 200
}]