Promise是什么? 有哪些參數(shù)? 如何使用?

名詞約定

一般來講,有以下的名詞約定:

  promise(首字母小寫)對象指的是“Promise實例對象”
  Promise首字母大寫且單數(shù)形式,表示“Promise構(gòu)造函數(shù)”
  Promises首字母大寫且復(fù)數(shù)形式,用于指代“Promises規(guī)范”

那么我們來扯一會

去年6月份, ES2015正式發(fā)布(也就是ES6,ES6是它的乳名),其中Promise被列為正式規(guī)范。作為ES6中最重要的特性之一,我們有必要掌握并理解透徹。本文將由淺到深,講解Promise的基本概念與使用方法。

promise是什么?

1、主要用于異步計算
2、可以將異步操作隊列化,按照期望的順序執(zhí)行,返回符合預(yù)期的結(jié)果
3、可以在對象之間傳遞和操作promise,幫助我們處理隊列

為什么會有promise?

同步:假設(shè)你去了一家飯店,找個位置,叫來服務(wù)員,這個時候服務(wù)員對你說,對不起我是“同步”服務(wù)員,我要服務(wù)完這張桌子才能招呼你。那桌客人明明已經(jīng)吃上了,你只是想要個菜單,這么小的動作,服務(wù)員卻要你等到別人的一個大動作完成之后,才能再來招呼你,這個便是同步的問題:也就是“順序交付的工作1234,必須按照1234的順序完成”。

異步:則是將耗時很長的A交付的工作交給系統(tǒng)之后,就去繼續(xù)做B交付的工作,。等到系統(tǒng)完成了前面的工作之后,再通過回調(diào)或者事件,繼續(xù)做A剩下的工作。

AB工作的完成順序,和交付他們的時間順序無關(guān),所以叫“異步”。


new
Promise(
function(resolve, reject){
// 一段耗時的異步操作
resolve('成功')// 數(shù)據(jù)處理完成
// reject('失敗') // 數(shù)據(jù)處理出錯
  }
).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是我們調(diào)用的順序 ["p3完成","p2完成","p1完成"]是我們返回的結(jié)果
               //可以看得出來,我們控制了3個異步請求的返回順序
           })

總結(jié) :promise.all的使用場景就是可以同時處理多個異步請求并控制他們返回【結(jié)果的順序】
注意:promise.all中的任何一個請求,都將不會有返回結(jié)果

.then()

1、接收兩個函數(shù)作為參數(shù),分別代表fulfilled(成功)和rejected(失?。?br> 2、.then()返回一個新的Promise實例,所以它可以鏈?zhǔn)秸{(diào)用
3、當(dāng)前面的Promise狀態(tài)改變時,.then()根據(jù)其最終狀態(tài),選擇特定的狀態(tài)響應(yīng)函數(shù)執(zhí)行
4、狀態(tài)響應(yīng)函數(shù)可以返回新的promise,或其他值,不返回值也可以我們可以認(rèn)為它返回了一個null;
5、如果返回新的promise,那么下一級.then()會在新的promise狀態(tài)改變之后執(zhí)行
6、如果返回其他任何值,則會立即執(zhí)行下一級.then()

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

1、因為.then()返回的還是Promise實例
2、會等里面的then()執(zhí)行完,再執(zhí)行外面的

promise結(jié)合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進(jìn)行異步操作
解決問題:1.回調(diào)多域問題2.多個并發(fā)請求
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是同步,什么是異步 既然要說Promise,那么就要先介紹一下什么是同步,什么是異步,javascript中執(zhí)...
    阿桐隨記閱讀 1,026評論 0 6
  • 本文轉(zhuǎn)載至http://www.itdecent.cn/p/1b63a13c2701 promise是什么? 1...
    莫名其妙的名字閱讀 142評論 0 0
  • Promise 是什么? 主要用于異步計算 可以間異步操作隊列化,按照期望得順序執(zhí)行,返回符合預(yù)期得結(jié)果 可以在對...
    前端_周瑾閱讀 3,430評論 1 3
  • promise是什么? 1、主要用于異步計算 2、可以將異步操作隊列化,按照期望的順序執(zhí)行,返回符合預(yù)期的結(jié)果 3...
    師妹不叫思妹閱讀 875評論 0 0
  • promise是什么? 1、主要用于異步計算 2、可以將異步操作隊列化,按照期望的順序執(zhí)行,返回符合預(yù)期的結(jié)果 3...
    Koreyoshi丶閱讀 250評論 0 1

友情鏈接更多精彩內(nèi)容