一个异步函数可以进行多次提取并返回结果?

时间:2018-09-28 14:20:35

标签: javascript json promise async-await fetch

我正在尝试编写一个异步函数,该函数进行多次访存,等待所有完成,然后将JSON结果作为数组返回。这是我到目前为止的内容:

file1.js

const searchResults = await Api.search(searchText);

api.js

async function search(searchText) {
    return util.executeFetchAll([
        `/searchA/${searchText}`,
        `/searchB/${searchText}`,
        `/searchC/${searchText}`
    ]);
}

util.js

async function executeFetchAll(urls) {
    const promises = urls.map(url => fetch(url));
    const responses = await Promise.all(promises);

    debugger;
}

当调试器中的执行暂停并且我使用Chrome的开发工具检查responses时,它正确地是3个Response对象的数组,但是如果我检查responses[0].json(),它会奇怪地返回控制台上的Promise {<pending>}对象。

我想念什么?我正在等待Promise.all,这应该意味着所有承诺都应在调试器行之前解决。那么,为什么json()方法奇怪地显示处于挂起状态的Promise对象?

谢谢。

1 个答案:

答案 0 :(得分:3)

response.json()返回承诺!参见:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

因此,您可以通过以下方式等待他们:

await Promise.all(responses.map(r => r.json()));