promise是什么

1、什么是promise玫恳?

是es6的新增語法,用來解決異步問題优俘,接口套接口的回調(diào)地獄問題京办。

2、promise的基本語法 上代碼

        //  基本語法
        var p = new Promise(function(resolve,reject){
            if("異步請求成功"){
                resolve('成功的結(jié)果')
            }else{
                reject('失敗的信息')
            }
        });

        p.then(
            function(res1){
                console.log(res1)    //promise的第一個then 中的第一個函數(shù)用來處理 resolve  
            },
            // function(res2){              
            //     console.log(res2)  // then的第二個函數(shù)也可以用來 接收reject的返回值
            // }

        ).catch(function(error){
            // 捕獲錯誤 
            if(error){
                console.log(error);
            }
        }).
        then(function(er){        // 第二個then是第一個then結(jié)束后的回調(diào)函數(shù)
           // 第一個then 處理結(jié)束后的回調(diào)函數(shù)
           console.log('處理完成');
        })

語法總結(jié)

  • 1帆焕、promise 的參數(shù)是一個回調(diào)函數(shù)惭婿,回調(diào)函數(shù)中有兩個 參數(shù)人別是resolve, reject resolve 用來返回異步請求成功的結(jié)果 reject 用來返回異步請求失敗的結(jié)果
  • 2、promise 的對象將異步請求結(jié)果保存后叶雹,需要使用第一個 .then來獲取結(jié)果resolve函數(shù)返回的結(jié)果 .catch 獲取reject 返回的結(jié)果财饥。當然,我們也可以在 第一個.then中的第二個 回調(diào)函數(shù)獲得 reject 返回的結(jié)果(上述問題可以查看代碼~ 我寫注釋了)
  • 3折晦、promise 還可意識用 第二個.then是第一個.then的回調(diào)函數(shù)钥星,這里可以繼續(xù)處理其他邏輯(個人感覺有些 馬后炮的意思,所以不經(jīng)常使用满着,出現(xiàn)的概率也比較低)

3谦炒、prmise.all的用法

prmise.all 語法

            var p1 = new Promise(function(resolve,reject){
                setTimeout(function(){
                    resolve('p1完成')
                },1000)
            })
            var p2 = new Promise(function(resolve,reject){
                setTimeout(function(){
                    resolve('p2完成')
                },2000)
            })
            var p3 = new Promise(function(resolve,reject){
                setTimeout(function(){
                    resolve('p3完成')
                },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é)果魂莫。

4还蹲、prmise.race的用法

            var p1 = new Promise(function (resolve, reject) {
                setTimeout(function(){
                  resolve('p1');  
                },1000)
                
            }) ;   
            var p2 = new Promise(function (resolve, reject) {
                setTimeout(function(){
                  resolve('p2');  
                },30)
            })
            Promise.race([p1, p2]).then(function (data) {
                console.log(data);  // 'p2'   這里只返回一個執(zhí)行最快的結(jié)果
            })

5、promise 結(jié)合 await async 封裝接口api

var token = JSON.parse(localStorage.getItem('userIfo')).remember_token
function http(url, type, data = '') {
    let p = new Promise((resolve, reject) => {
        if (token) {
            $.ajax({
                headers: {
                    Authorization: 'Bearer ' + token
                },
                url,
                type,
                data,
                success: (res) => {
                    resolve(res)
                },
                error: (er) => {
                    reject(er)
                }
            })
        }

    })
    return p
}

function getNav() {
    return http(`http://120.xx.xx.103:84/api/menu/info`, 'post')
}
function getList(n,status,nickname,mobel) {
   return http(`http://120.xx.xx.103:84/api/user?page=${n}&limit=10&status=${status}&nickname=${nickname}&mobile=${mobel}&`, 'get')
}

// 調(diào)用

async function List(n, status, nickname, mobel) {  
    var list = await getList(n, status, nickname, mobel)  
    //  這個將 異步的接口封裝豁鲤,同步化
    console.log(list); // 這里以同步的方式 獲得異步結(jié)果
 }  


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秽誊,一起剝皮案震驚了整個濱河市鲸沮,隨后出現(xiàn)的幾起案子琳骡,更是在濱河造成了極大的恐慌,老刑警劉巖讼溺,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楣号,死亡現(xiàn)場離奇詭異,居然都是意外死亡怒坯,警方通過查閱死者的電腦和手機炫狱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剔猿,“玉大人视译,你說我怎么就攤上這事」榫矗” “怎么了酷含?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵鄙早,是天一觀的道長。 經(jīng)常有香客問我椅亚,道長限番,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任呀舔,我火速辦了婚禮弥虐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘媚赖。我一直安慰自己霜瘪,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布惧磺。 她就那樣靜靜地躺著粥庄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪豺妓。 梳的紋絲不亂的頭發(fā)上惜互,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音琳拭,去河邊找鬼训堆。 笑死,一個胖子當著我的面吹牛白嘁,可吹牛的內(nèi)容都是我干的坑鱼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼絮缅,長吁一口氣:“原來是場噩夢啊……” “哼鲁沥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耕魄,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤画恰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吸奴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體允扇,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年则奥,在試婚紗的時候發(fā)現(xiàn)自己被綠了考润。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡读处,死狀恐怖糊治,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罚舱,我是刑警寧澤井辜,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布揖赴,位于F島的核電站,受9級特大地震影響抑胎,放射性物質(zhì)發(fā)生泄漏燥滑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一阿逃、第九天 我趴在偏房一處隱蔽的房頂上張望铭拧。 院中可真熱鬧,春花似錦恃锉、人聲如沸搀菩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肪跋。三九已至,卻和暖如春土砂,著一層夾襖步出監(jiān)牢的瞬間州既,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工萝映, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吴叶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓序臂,卻偏偏與公主長得像蚌卤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奥秆,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容