promise allsettle,promise allset
如何使用Promise.allSettled()?下面这篇文章就带你了解一下Promise.allSettled()并介绍一下它的用法。希望对你有帮助!
Promise.allSettled()方法在所有给定的承诺被履行或拒绝后返回一个承诺,并带有一个对象数组,每个对象代表相应的承诺结果。
接下来,我们来看看Promise.allSettled()是如何工作的。
1. Promise.allSettled()
Promise.allSettled()可用于并行执行独立的异步操作,并收集这些操作的结果。
该函数将promise数组(通常是一个可迭代的对象)作为参数:
const status promise=promise . all settled(promises);当所有的输入承诺都实现或被拒绝时,statusesPromise被解析到一个数组中,其中包含它们的状态。
{状态:已履行,值:值}—如果相应的承诺已履行
或者{状态:已拒绝,原因:原因}如果相应的承诺已被拒绝。
解析所有承诺后,您可以使用then语法提取它们的状态:
statuses promise . then(status={
状态;//[{状态: .,值:“.”},]
});或者使用异步/等待语法:
常量状态=等待状态承诺;
状态;//[{状态: .,值:“.”},]:
2. 取水果和蔬菜
在深入研究Promise.allSettle()之前,我们先定义两个简单的helper函数。
首先,resolveTimeout(value,delay)返回一个承诺,在延迟时间过去后用value实现。
函数resolveTimeout(值,延迟){
返回新承诺(
resolve=setTimeout(()=resolve(value),delay)
);
}二、rejectTimeout(reason,delay)-延迟时间过去后返回拒绝原因的承诺。
最后,我们使用这些辅助函数对promise.allsettle()进行实验。
2.1 All promises fulfilled
同时,我们参观当地杂货店的蔬菜和水果。访问每个列表是一个异步操作:
const status promise=promise . all settled([
resolveTimeout([土豆,西红柿],1000),
resolveTimeout([桔子,苹果],1000)
]);
//等待.
常量状态=等待状态承诺;
//1秒钟后
console.log(状态);
//[
//{状态:已履行,值:[土豆,西红柿] },
//{状态:已履行,值:[桔子,苹果] }
//]Promise.allSettled([.])返回一个promise statusesPromise,1秒求解,就在蔬菜水果求解之后,并行。
StatusesPromise解析为包含状态的数组。
数组的第一项包含蔬菜的完成状态:status: fulfilled ,value: [potatoes , tomatoes]}
同理,第二项是水果的完成状态:{status:已完成,value: [橙子,苹果]}
2.2一个 promise 被拒绝
想象一下,杂货店里没有水果。在这种情况下,我们拒绝水果的承诺。
在这种情况下,promise.allsettle()如何工作?
const status promise=promise . all settled([
resolveTimeout([土豆,西红柿],1000),
rejectTimeout(新错误(没有水果了!), 1000)
]);
//等待.
常量状态=等待状态承诺;
//1秒钟后
console.log(状态);
//[
//{状态:已履行,值:[土豆,西红柿] },
//{状态:已拒绝,原因:错误(没有水果了!) }
//]由promise.allsettled ([.])在1秒后解析为状态数组:
数组中的第一项“蔬菜承诺”已成功解析:{status: fulfilled ,value:[ potatos , tomatoes]}
第二,因为水果承诺被拒绝,所以是拒绝状态:{状态:拒绝,原因:错误( out of fruits)}
即使输入数组中的第二个promise被拒绝,statusesPromise仍将成功解析一个状态数组。
2.3 所有的 promises 都被 rejected
如果杂货店的蔬菜水果都卖完了怎么办?在这种情况下,两个承诺都会被拒绝。
const status promise=promise . all settled([
rejectTimeout(新错误(蔬菜用完了!), 1000),
rejectTimeout(新错误(没有水果了!), 1000)
]);
//等待.
常量状态=等待状态承诺;
//1秒钟后
console.log(状态);
//[
//{状态:已拒绝,原因:错误(蔬菜缺货!) },
//{状态:已拒绝,原因:错误(没有水果了!) }
//]在这种情况下,statusesPromise仍然成功解析为状态数组。但是,该数组包含被拒绝承诺的状态。
3.总结
promise . all set(promises)可以并行运行promise,并将状态(已履行或拒绝)收集到一个聚合数组中。
Promise.allSettled(.)在您需要执行并行和独立的异步操作并收集所有结果时非常有效,即使有些异步操作可能会失败。
有关编程的更多信息,请访问:编程视频!以上是如何深入使用Promise.allSettled()的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。