Javascript 使用Promise.all解析获取请求
我有一个由4个请求对象组成的数组,我想在这些对象上使用fetchapi并获取承诺。然后,我想解决这些承诺中的每一个,并找回价值观 下面是我如何构建请求对象的Javascript 使用Promise.all解析获取请求,javascript,promise,Javascript,Promise,我有一个由4个请求对象组成的数组,我想在这些对象上使用fetchapi并获取承诺。然后,我想解决这些承诺中的每一个,并找回价值观 下面是我如何构建请求对象的 let requestsArray = urlArray.map((url) => { let request = new Request(url, { headers: new Headers({ 'Content-Type': 'text/json'
let requestsArray = urlArray.map((url) => {
let request = new Request(url, {
headers: new Headers({
'Content-Type': 'text/json'
}),
method: 'GET'
});
return request;
});
下面是我如何尝试使用Promise.all()
最后一个console.log(值)
不会向控制台打印任何内容。我是否使用了Promise.all()
错误
我知道第一个请求通过了,当我单独运行每个请求时,它工作正常。唯一的问题是当我试图同时运行它们时 我看不出任何问题,对我来说,它返回的很好: 但是,这是对jsfiddles/echo/json URL的测试,而不是对原始URL的测试。因此,我假设你的情况发生了一些错误。 我建议添加一个
catch
来记录错误:
Promise.all(requestsArray.map((request) => {
return fetch(request).then((response) => {
return response.json();
}).then((data) => {
return data;
});
})).then((values) => {
console.log('values', values);
}).catch(console.error.bind(console));
编辑:只是为了完整性:根据API()或其他任何内容,我看不到任何问题。为什么要将其映射两次?让请求数组从fetch返回实际承诺
let requestsArray = urlArray.map((url) => {
let request = new Request(url, {
headers: new Headers({
'Content-Type': 'text/json'
}),
method: 'GET'
});
return fetch(request).then(res => res.json());
});
现在你有了一系列的承诺。这承诺,一切都接受了
Promise.all(requestsArray).then(allResults => {
console.log(allResults)
})
这里有一个模拟的JSFIDLE:没有函数对不起,我重命名了变量。现在更新了代码。您根本没有定义任何
catch
。。你确定没有错误吗?这回答了你的问题吗?我确实试过这样做,但我所有的请求,除了一个,似乎都挂在了网络标签上。唯一得到解决的是第一个请求。看起来您的代码/方法是正确的,但只是fetch请求没有得到解决。您是否尝试过在浏览器中手动打开这些URL?他们还东西吗?如果您单独捕获每个请求以查看停止了什么,会发生什么情况?是的,我尝试了catch
错误处理。没有错误弹出。当我查看我的“网络”选项卡时,它只是说除了第一个请求外,其他请求都挂起了。@ZaidHumayun但行为是正确的。根据MDN,Promise.all“当给定iterable中的所有承诺都已解决,或者任何承诺被拒绝时”解决。在您的情况下,由于存在挂起的请求,因此它们没有解析/拒绝。你应该检查他们为什么花那么长时间(一定是网络问题,没有承诺)。是的,你是对的。在服务器上返回承诺的方式有问题。在那种情况下,我是否应该接受你的答案?我现在不知道如何解决这个问题。@ZaidHumayun因为它似乎解决了你的问题,如果你接受我的回答,我会很高兴的。但是,如果其他答案更有用/更详细等,您当然可以自由接受。
Promise.all(requestsArray).then(allResults => {
console.log(allResults)
})