gpt4 book ai didi

javascript - Promise.all() 中的 State of Promise 和 query 是什么?

转载 作者:行者123 更新时间:2023-12-04 09:59:53 24 4
gpt4 key购买 nike

在本文的上下文中:Graceful asynchronous programming with Promises .在部分:“运行代码以响应多个 promise 的履行”。

对于这个特定的代码片段:

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() 的任何 promise 的任何错误情况。 如果任何一个 promise 被拒绝,catch 块会告诉你哪个有问题。 .all() 块(见下文)仍然会执行,但不会显示有问题的资源 .如果您希望 .all 拒绝,则必须将 .catch() 块链接到那里的末尾。

如果任何 Promise 被拒绝,为什么 .all() 块会实现?看着 Promise.all() refrence on MDN它说 .all() 块只有在所有 promise 都得到实现时才会得到实现。

另外函数返回的promise状态是什么,如果我们无法从url中获取并且我们将进入.catch块,在这种情况下promise的状态不会仍然是pending吗??

最佳答案

你的困惑是可以理解的。您缺少的部分是 Promise.all 将始终成功,因为您正在为每个单独的 promise 添加一个捕获。

因此,即使其中一个子 promise 失败,您也只会得到 undefined而不是值(value),但您已经处理了任何拒绝。一旦你.catch由此产生的 Promise 被认为是已解决,而不是被拒绝。如果你希望它仍然被拒绝,你可以在登录后重新抛出错误。

关于javascript - Promise.all() 中的 State of Promise 和 query 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61856357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com