es6新特性(四之Promise )

Promise

字面意思是承诺,但具体用法和场景呢

  • 一、首先了解Promise对象和Promise的调用,其中涉及到关键词resolve、reject、和then
  •  resolve和reject是函数里的参数翻译过来是解决和决绝,简单来理解即表示成功和失败的回调函数。
  •  Promise对象的调用方式需要用到then方法

 例如:

let p=new Promise(function(resolve,reject){
     
   $.ajax(
   {
      url:url,
      dataType:"json",
      success(arr)
      {
        resolve(arr);
      },
     error(err)
     { 
       reject(err);
     }     
   })
   
})

p.then(
function(res)//这个的函数就是resolve回调
{
  //成功时调用这里
},
function(res){//这个的函数就是reject回调
  //失败时调用这里
})

这便是Promise的运用,但实际上我们感觉不到有意义或是这样做有什么好处,确时没什么用。我们下面继续

  • 二、Promise.all()
  • Promise.all可以同时处理多个Promise对象,当所有的对象方法都处理成功时,我们才算是成功!

    比如我们已经实例化好了两个Promise对象

Promise.all([
   p1,p2
]).then(function(){"所有操作都成功调这里"},function(){"哪怕有一个失败就调这里"})

  而在高版本的Jquery里,每个$.ajax都会返回一个promise对象,所以

Promise.all([
   $ajax({url:url1}),
   $ajax({url:url2}),
   $ajax({url:url3}),
]).then(function(arr){
  let [res1,res2,res3]=arr;//正好用解构赋值来接受每一个异步请求后获得的结果集
 //所有操作都成功调这里
},
function(){
   //哪怕有一个失败就调这里
})
  • 三、Promise.race() 了解一下即可,翻译为竞速

     和Promise.all()用法差不多,只不过核心逻辑不一样,如同时发起多个异步请求,谁先完成请求返回数据就用谁

总结:目前还是没有找到很实在的应用场景。。

猜你喜欢

转载自blog.csdn.net/hiose89/article/details/88974636