我正在尝试编写一个异步函数,该函数进行多次访存,等待所有完成,然后将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对象?
谢谢。
答案 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()));