Promise是一种异步编程的解决方案;(个人理解:譬如说一个需求需要两个请求将结果返回后才能处理,这时用Promise就很方便)
我们可以用setTimeout来模拟网络请求
setTimeout(()=>{
  console.log("使用setTimeout来模拟网络请求");
},1000)意义:1秒钟后回调箭头函数,并执行箭头函数的内容;
Promise详解简介:
     Promise相当于一个类,调用时需要先初始化成对象;该对象的参数是一个函数,通常是箭头函数,而该函数中的参数也是函数,通常是resolve和reject函数;resolve函数是请求成功时调用的函数,reject是请求失败时处理的函数;resolve调用的函数需要用then回调函数进行处理,reject调用的函数需要用catch函数进行回调处理;
 简单实例
new Promise((resolve,reject)=>{
    setTimeout((data)=>{
      //console.log("success"); 调用成功,但是不在这个地方进行处理
      resolve('promise');
      reject('error message');
    },10000)
  }).then((data)=>{
    console.log(data); //调用成功,通过resolve函数在这个地方进行处理
  }).catch((err)=>{
    console.log(err); //调用失败,通过reject函数在这个地方进行处理
  })Promise是链式编程,简单实例
new Promise((resolve,reject)=>{
    setTimeout(()=>{
      resolve
    },1000)
  }).then(()=>{
    console.log('处理第一层返回的结果');
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        resolve
      },1000)
    })
  }).then(()=>{
    console.log(‘处理第二层返回的结果’)
    return new Promise()......
  })注意:此时一定要注意,处理的回调函数是处于同一层级;
 什么情况下会用到Promise?一般情况下是有异步操作时,使用Promise对这个异步操作进行封装;
 //new ->构造函数(1.保存了一些状态信息 2.执行传入的参数)
 //在执行传入的回调函数时,会传入两个参数,resolve,reject。其本身又是函数
 Promise的三种状态:
     异步操作之后会有三种状态:
         pending:等待状态,比如止住网络请求,或者定时器没有到时间;
         fulfill:满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()
         reject:拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()
 使用Promise的简单方法实例:
new Promise((resolve,reject)=>{
    setTimeout(()=>{
      resolve('aaa')
    },1000)
  }).then((res)=>{
    //自己处理的代码
    console.log(res,'第一层的处理代码')
    //对结果进行处理的代码
    return Promise.resolve(res+'111')
    //或者是
    return res+'111';
    //return Promise.reject('error message')
    //throw 'error message'
  }).then((res)=>{
    console.log(res,'第二层的处理代码')
    //对结果进行处理的代码
    return Promise.resolve(res+'222')
    //或者是
    return res+'222';
  }).catch((err)=>{
    console.log(err);
  })异步请求的封装
在没有使用promise时:
let isResult1 = false;
let isResult2 = false;
$ajax({
url:'url1',
success:function(){
console.log('结果1')
isResult1 = true
handleResult()
}
})
$ajax({
url:'url2',
success:function(){
console.log('结果2')
isResult2 = true
handleResult()
}
})
function handleResult(){
if(isResult1 && isResult2){
//开始处理请求
}
}
当我们使用了Promise后
Promise.all([
new Promise((resolve,reject)=>{
$ajax({
url:'url1',
success:function(){
console.log('结果1')
isResult1 = true
handleResult()
}
})
})
new Promise((resolve,reject)=>{
$ajax({
url:'url2',
success:function(){
console.log('结果2')
isResult2 = true
handleResult()
}
})
})
]).then((results)=>{
result[0] //就是ajax1请求处理的结果
result[1] //就是ajax2请求处理的结果
})
简单实例:
Promise.all([
new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve({name:'why',age:18})
},2000)
})
new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve({name:'kobe',age:41});
},1000)
})
]).then(results=>{
console.log(results)
})










