这是我的用例: -我有两个网址,我发送相同的输入来填充参数 -我需要解析JSON响应并根据响应的键创建一个列表。
这是我到目前为止的代码:
function initialCall(input) {
let urls = [
`https://mybusinessendorsements.com/api/auth?token=0d34aa6dad5d50de697c62bdf8a633f4&industry=${input}`,
`http://mybusinessendorsements.com/api_spn/auth?token=0d34aa6dad5d50de697c62bdf8a633f4&industry=${input}`
];
let requests = urls.map(url => fetch(url));
Promise.all(requests)
.then(responses => responses.forEach(
response => alert(`${response.json()}: ${response.status}`)
))};
//[object Promise]: 200
//[object Promise]: 200
我不确定如何获取json数组以进行打印以根据需要进行解析和操作,帮助!?
答案 0 :(得分:2)
response.json()
返回另一个Promise [1],因此您需要两次调用Promise.all
,如下所示:
Promise.all(requests)
.then(responses => Promise.all(responses.map(r => r.json())))
.then(jsonObjects => /* ... */);
为了便于阅读,您可以引入一个辅助函数
Promise.all(requests)
.then(toJSON)
.then(jsonObjects => /* ... */);
function toJSON(responses) {
if (!Array.isArray(responses)) {
// also handle the non array case
responses = [responses];
}
return Promise.all(responses.map(response => response.json()));
}
如果您需要保留响应(状态):
function resolveJSON(responses) {
return Promise.all(
responses.map(response => response.json()
// will return an object with keys "response" and "json"
.then(json => { response, json }))
);
}
[1] https://developer.mozilla.org/en-US/docs/Web/API/Body/json