Promise之all

一,

Promise.all(iterable)查看报道方法一个解析参数中的所有承诺  都已解析或者迭代参数不所有游戏承诺  的单个解析器。它拒绝了拒绝的第一个承诺的原因Promiseiterable

var promise1 = Promise.resolve(1); 
var promise2 = 2; 
var promise3 = new Promise(function(resolve,reject){ 
  setTimeout(resolve,100,'zz'); 
}); 

Promise.all([promise1,promise2,promise3]),然后(函数(值){。
  的的console.log(值); 
}); 
//输出:Array [1,2,“zz”];
描叙1.如果一个空的迭代被传递,那么这个方法返回(同步)一个已经解决的诺言。2. 
如果所有传入的承诺都履行或不承诺,则返回的承诺将Promise.all异步履行
3 。在所有情况下,返回的承诺都是通过一个数组实现的,该数组包含作为参数传递的所有迭代值(也是非承诺值)

4 . 拒绝:
如果任何传入的承诺拒绝,Promise.all异步拒绝拒绝承诺的价值,其他承诺是否已经解决。

例子

1. Promise.all 等待所有履行(或第一次拒绝)

var p1 = Promise.resolve(3); 
var p2 = 1337; 
var p3 = new Promise((resolve,reject)=> { 
  setTimeout(resolve,100,'foo'); 
}); 

Promise.all([p1,p2,p3])。然后(values => { 
  的console.log(值); // [3,1337,“foo”] 
});

2. 如果迭代包含非诺值,它们将被忽略,但仍计入返回的承诺数组值(如果保证已满足):

/ /这将被视为如果通过的迭代是空的,所以它得到满足
var p = Promise.all([1,2,3]); 
/ /这将被计算为如果传递的迭代包含值只有解决的承诺“444”,所以它得到满足
var p2 = Promise.all([1,2,3,Promise.resolve(444)]); 
//这将被视为传递的迭代只包含被拒绝的值为“555”的承诺,因此它被拒绝
var p3 = Promise.all([1,2,3,Promise.reject(555)]); 

//使用的setTimeout,可以我们在堆栈清空后执行代码
的的setTimeout(函数(){ 
    的的console.log(P); 
    的的console.log(P2); 
    的的console.log(P3); 
}); 

// Promise {<state>:“fulfilled”,<value>:Array [3]} 
// Promise {<state>:“fulfilled”,<value>:Array [4]} 
// Promise {<state> “拒绝”,<原因>:555}


3.异步或者同步性Promise.all

以下示例演示了以下异步性(或同步性,如果传递的迭代是空的)Promise.all:

//我们传递一个已经解决的promise数组作为参数,
//尽快触发Promise.all 
var resolvedPromisesArray = [Promise。解决(33),Promise.resolve(44)]; 

var p = Promise.all(resolvedPromisesArray); 
//立即记录p值的
的执行console.log(P); 

//使用setTimeout,我们可以在堆栈清空后执行代码
的setTimeout(函数(){ 
    console.log('堆栈现在是空的'))
    的console.log(P); 
}); 

//日志,按顺序:
// Promise {<state>:“pending”} 
//堆栈现在是空的
// Promise {<state>:“ fulfilled ”,<value>:Array [2]} 
如果Promise。所有拒绝,则会发生同样的情况:

var mixedPromisesArray = [Promise.resolve(33),Promise.reject(44)]; 
var p = Promise.all(mixedPromisesArray); 
的console.log(P);
的setTimeout(函数(){ 
    console.log('堆栈现在是空的'); 
    的console.log(P); 
}); 

// Promise {<state>:“pending”} 
//堆栈现在是空的
// Promise {<state>:“rejected”,<reason>:44}

4. 传递的迭代的的英文空的时才Promise.all同步解析

var p = Promise.all([]); //会立即解决
var p2 = Promise.all([1337,“hi”]); //非承诺值将被忽略,但评估将异步完成
的console.log(P); 
执行console.log(P2)
的setTimeout(函数(){ 
    console.log('堆栈现在是空的'); 
    的的console.log(P2); 
}); 

//日志
// Promise {<state>:“fulfilled”,<value>:Array [0]} 
// Promise {<state>:“pending”} //等待
//堆栈现在是空的
// Promise { <state>:“fulfilled”,<value>:Array [2]}
5,失败的行为:
  Promise.all 如果任何元素被拒绝,则被拒绝。例如,如果您在超时之后传递四个承诺,并且一个承诺立即拒绝, Promise.all 则会立即拒绝。
var p1 = new Promise((resolve,reject)=> { 
  setTimeout(resolve,1000,'one'); 
}); 
var p2 = new Promise((resolve,reject)=> { 
  setTimeout(resolve,2000,'two'); 
}); 
var p3 = new Promise((resolve,reject)=> { 
  setTimeout(resolve,3000,'three'); 
}); 
var p4 = new Promise((resolve,reject)=> { 
  setTimeout(resolve,4000,'four'); 
}); 
var p5 = new Promise((resolve,reject)=> { 
  拒绝('拒绝'); 
}); 

Promise.all([p1,p2,p3,p4,p5])。then(values => { 
  的console.log(值); 
},reason => { 
  执行console.log(理由)
}); 

//从控制台:
//“拒绝” 

//你也可以使用.catch
Promise.all([p1,p2,p3,p4,p5])。then(values => { 
  的console.log(值); 
})。catch(reason => { 
  执行console.log(理由)
}); 

//从控制台:
//“拒绝”





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值