Javascript Promise.all()中的Promise和query的状态是什么?
在本文的上下文中:。以及“运行代码以响应多个承诺” 对于此特定代码段:Javascript Promise.all()中的Promise和query的状态是什么?,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,在本文的上下文中:。以及“运行代码以响应多个承诺” 对于此特定代码段: function fetchAndDecode(url, type) { return fetch(url).then(response => { if (type === 'blob') { return response.blob(); } else if (type === 'text') { return response.text(); } })
function fetchAndDecode(url, type) {
return fetch(url).then(response => {
if (type === 'blob') {
return response.blob();
} else if (type === 'text') {
return response.text();
}
})
.catch(e => {
console.log('There has been a problem with your fetch operation: ' + e.message);
});
}
let coffee = fetchAndDecode('coffee.jpg', 'blob');
let tea = fetchAndDecode('tea.jpg', 'blob');
let description = fetchAndDecode('description.txt', 'text');
Promise.all([coffee, tea, description]).then(values => {
});
文章中说:在块的末尾,我们连接一个.catch()调用,以处理可能出现的任何错误情况,这些错误情况可能会在数组中传递给.all()如果任何承诺被拒绝,catch块将告诉您哪一个有问题。.all()块(见下文)仍将履行,但不会显示有问题的资源。如果要拒绝.all,则必须将.catch()块链接到其末尾
如果任何承诺被拒绝,那么.all()块将实现吗?看着它说。all()块只有在所有承诺都实现时才会实现
另外,如果我们无法从url获取并进入。catch block,那么函数返回的承诺状态将是什么?在这种情况下,承诺状态是否仍将挂起???您的困惑是可以理解的。你缺少的一点是承诺。一切都将永远成功,因为你给每个承诺都添加了一个陷阱 因此,即使其中一个子承诺失败,您也只会得到
未定义的
,而不是值,但您已经处理了任何拒绝。一旦你.catch
得到的承诺将被视为已解决,而不是被拒绝。如果仍希望拒绝,可以在日志记录后重新抛出错误。您显示的.catch()
处理拒绝并将其转化为已兑现的承诺。因此,没有被拒绝的承诺会影响你的承诺。all()
。这通常不是使用Promise.all()
编程的方式。如果您想要所有结果,Javascript有Promise.allsolited()
。不管是否有些失败。谢谢!只有一句话“一旦你,抓住…”就清楚了。