我有以下代码:
const response = Promise.all([
await fetch(`http://${location.hostname}${this.config.baseName}/data.php`),
await fetch(`http://${location.hostname}${this.config.baseName}/data.php?a=3423`)
]);
const body = JSON.parse(await response.[[PromiseValue]][1].text());
我知道最后一行response.[[PromiseValue]]
不是正确的语法。但是当我查看Chrome开发人员工具时,我发现[[PromiseValue]]是属性名称。
如何引用promise值数组的第二个元素?
修改 我不相信我的问题与What is the significance of the double brackets for the [[prototype]] property in JavaScript?
有关我询问如何参考Promise的结果。所有。我没有问过双方括号的重要性。
答案 0 :(得分:3)
一些事情。首先,没有必要等待Promise.all
的参数,因为总体承诺无论如何都会等待它们。你可以,但这是多余的。
其次,Promise.all
返回一个promise,该promise使用其参数的已解析值数组进行解析。因此,在这种情况下,您的Promise.all
将返回包含两个Response
对象的数组的承诺。这意味着你应该等待整体Promise.all
而不是它的论点。
最后,回复中提供了.json()
方法,因此,如果您不想,则不必手动使用JSON.parse
。所以:
// response will be an array: [resp1, resp2].
const response = await Promise.all([
fetch(`http://${location.hostname}${this.config.baseName}/data.php`),
fetch(`http://${location.hostname}${this.config.baseName}/data.php?a=3423`)
]);
const body = await response[1].json();
就够了。如果您愿意,也可以利用一些解构。所以这也可以:
const [response1, response2] = await Promise.all([
fetch(`http://${location.hostname}${this.config.baseName}/data.php`),
fetch(`http://${location.hostname}${this.config.baseName}/data.php?a=3423`)
]);
const body = await response2.json();
答案 1 :(得分:1)
ES6提供了有趣的方法。
要定位第二个元素,请尝试以下方法:
const [first, second]= await Promise.all([
fetch(`http://${location.hostname}${this.config.baseName}/data.php`),
fetch(`http://${location.hostname}${this.config.baseName}/data.php?a=3423`)
]);
const body = JSON.parse(await second.text());