Promise.all()


1、 Promise.all() 方法用于将多个Promise 实例,包装成一个新的 Promise 实例

var getJSON = function(id){
  var a = new Promise(function(resolve, reject){
   $.ajax({
    url: "https://cd.jd.com/yanbao/v3?skuId="+ id +"&cat=737,738,749&area=1_72_2799_0&brandId=129143",
    type: "GET",//请求方式为get
    dataType: "jsonp", //返回数据格式为json
    success: function(data) {//请求成功完成后要执行的方法
     resolve(id);
    }
   })
  });
  return a;
 }
 // 生成一个Promise对象的数组
 var promises = [1803562, 1803564, 1803565, 1803566].map(function (key) {
  return getJSON(key);
 });
 
 var P = Promise.all(promises).then(function (params) {
  console.log(params);
 }).catch(function(reason){
  
 });




var getJSON = function(id){
 var a = new Promise(function(resolve, reject){
  $.ajax({
   url: "https://cd.jd.com/yanbao/v3?skuId="+ id +"&cat=737,738,749&area=1_72_2799_0&brandId=129143",
   type: "GET",//请求方式为get
   dataType: "jsonp", //返回数据格式为json
   success: function(data) {//请求成功完成后要执行的方法 
    if(id = 1803565){
     reject(1803565);
    }else{
     resolve(id);
    }
   }
  })
 });
 return a;
}
// 生成一个Promise对象的数组
var promises = [1803562, 1803564, 1803565, 1803566].map(function (key) {
 return getJSON(key);
});

var P = Promise.all(promises).then(function (params) {
 console.log(params);
}).catch(function(reason){
 console.log(1803565 + "被catch了");
});

Promise.all方法接受一个数组作为参数,p1p2p3都是 Promise 实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为 Promise 实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。)

1、其代码中P的状态是由参数promises数据中的每个一promise对象状态决定的,只有所有都promise都是完成的状态(resolve)才会执行then的第一个与之对应的参数函数,并接收所有promise返回的数据构成的数据数组

2、promises对象的参数函数之中有一个被rejectedP的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。并补catch捕获到


猜你喜欢

转载自blog.csdn.net/lovearforever/article/details/80813260