从Promise.All获取项的语法([await fetch(),await fetch()])

时间:2017-12-28 00:27:52

标签: javascript promise

我有以下代码:

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]]是属性名称。

enter image description here

如何引用promise值数组的第二个元素?

修改 我不相信我的问题与What is the significance of the double brackets for the [[prototype]] property in JavaScript?

有关

我询问如何参考Promise的结果。所有。我没有问过双方括号的重要性。

2 个答案:

答案 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());