Promise是什么? 有哪些参数? 如何使用?

名词约定

一般来讲,有以下的名词约定:

  promise(首字母小写)对象指的是“Promise实例对象”
  Promise首字母大写且单数形式,表示“Promise构造函数”
  Promises首字母大写且复数形式,用于指代“Promises规范”

那么我们来扯一会

去年6月份, ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范。作为ES6中最重要的特性之一,我们有必要掌握并理解透彻。本文将由浅到深,讲解Promise的基本概念与使用方法。

promise是什么?

1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列

为什么会有promise?

同步:假设你去了一家饭店,找个位置,叫来服务员,这个时候服务员对你说,对不起我是“同步”服务员,我要服务完这张桌子才能招呼你。那桌客人明明已经吃上了,你只是想要个菜单,这么小的动作,服务员却要你等到别人的一个大动作完成之后,才能再来招呼你,这个便是同步的问题:也就是“顺序交付的工作1234,必须按照1234的顺序完成”。

异步:则是将耗时很长的A交付的工作交给系统之后,就去继续做B交付的工作,。等到系统完成了前面的工作之后,再通过回调或者事件,继续做A剩下的工作。

AB工作的完成顺序,和交付他们的时间顺序无关,所以叫“异步”。


new
Promise(
function(resolve, reject){
// 一段耗时的异步操作
resolve('成功')// 数据处理完成
// reject('失败') // 数据处理出错
  }
).then(
(res) =>{console.log(res)},// 成功
(err) =>{console.log(err)}// 失败
)

promise.all的用法

    var p1=Promise(function(resolve,reject){
               setTimeout(function(){
                   resolve('p1完成')
               },1000)
           })
           var p2=Promise(function(resolve,reject){
               setTimeout(function(){
                   resolve('p1完成')
               },2000)
           })
           var p3=Promise(function(resolve,reject){
               setTimeout(function(){
                   resolve('p1完成')
               },3000)
           })
           Promise.all([p3,p2,p1]).then(function(res){
               console.log(res);
               //p3,p2,p1是我们调用的顺序 ["p3完成","p2完成","p1完成"]是我们返回的结果
               //可以看得出来,我们控制了3个异步请求的返回顺序
           })

总结 :promise.all的使用场景就是可以同时处理多个异步请求并控制他们返回【结果的顺序】
注意:promise.all中的任何一个请求,都将不会有返回结果

.then()

1、接收两个函数作为参数,分别代表fulfilled(成功)和rejected(失败)
2、.then()返回一个新的Promise实例,所以它可以链式调用
3、当前面的Promise状态改变时,.then()根据其最终状态,选择特定的状态响应函数执行
4、状态响应函数可以返回新的promise,或其他值,不返回值也可以我们可以认为它返回了一个null;
5、如果返回新的promise,那么下一级.then()会在新的promise状态改变之后执行
6、如果返回其他任何值,则会立即执行下一级.then()

.then()里面有.then()的情况

1、因为.then()返回的还是Promise实例
2、会等里面的then()执行完,再执行外面的

promise结合await asyan封装接口API

var token = JSON.parse(localStorage.getItem('userInfo')).remember_token
function http(url, type, data = '') {
 var p =  new Promise((v, b) => {
       $.ajax({
           headers: {
               Authorization: 'Bearer ' + token
           },
           url,
           type,
           data,
           success: (res) => {
               v(res)
           },error:(er)=>{
               b(er)
           }
       })
   })
   return p
}

function getNav(){
   return http('http://***.**.**.***:**/api/menu/info','post')
}
function getList(pageNum,statues,nickname,mobile){
   return http(`http://***.**.**.***:**/api/user?page=${pageNum}&limit=10&status=${statues}&nickname=${nickname}&mobile=${mobile}&`,'get')
}

如何使用?

使用场景:promise封装api接口
Promise进行异步操作
解决问题:1.回调多域问题2.多个并发请求
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是同步,什么是异步 既然要说Promise,那么就要先介绍一下什么是同步,什么是异步,javascript中执...
    阿桐随记阅读 958评论 0 6
  • 本文转载至//www.greatytc.com/p/1b63a13c2701 promise是什么? 1...
    莫名其妙的名字阅读 121评论 0 0
  • Promise 是什么? 主要用于异步计算 可以间异步操作队列化,按照期望得顺序执行,返回符合预期得结果 可以在对...
    前端_周瑾阅读 3,388评论 1 3
  • promise是什么? 1、主要用于异步计算 2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果 3...
    师妹不叫思妹阅读 811评论 0 0
  • promise是什么? 1、主要用于异步计算 2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果 3...
    Koreyoshi丶阅读 230评论 0 1