為什么要使用promise

起因

大家都知道做前端開發(fā)的時候最讓人頭痛的就是處理異步請求的情況陶因,在請求到的成功回調函數(shù)里繼續(xù)寫函數(shù),長此以往形成了回調地獄垂蜗。

function load() {
    $.ajax({
        url: 'xxx.com',
        data: 'jsonp',
        success: function(res) {
            init(res, function(res) {
                render(res, function(res) {
                    // 一層一層又一層
                });
            });
        }
    }
}

load();


這樣的代碼看層級少了當然還是可以湊合看的楷扬,但是多起來的話,那就難以維護了贴见,無論是開發(fā)者自身還是同事來接手項目烘苹,都是極其無奈的!還要我怎樣片部,要怎樣镣衡,怎樣,樣档悠。

于是乎 出現(xiàn)了Promise

當年在聽到關于Promise的報道的時候沒有太多關注廊鸥,只是知道是解決回調地獄問題的,一種異步請求解決方案而已辖所。
后來在工作當中發(fā)現(xiàn)JQ也實現(xiàn)了相關的方法惰说,上代碼

$.get('xxx.php').done(function() {
    alert('成功的回調');    // 相當于Promise的resolve()
});

現(xiàn)在看來,真的和Promise差不多呢缘回。那么我們回到今天的主角來
先介紹一下Promise的三種狀態(tài):

  • Pending 創(chuàng)建Promise對象時的初始狀態(tài)
  • Fulfilled 成功時的狀態(tài)
  • Rejected 失敗時的狀態(tài)

說完了狀態(tài)直接上代碼吆视,我們得會用才行:
還以上面load函數(shù)的例子

  // then方法是用的最多的了
  // 按照then來執(zhí)行成功和失敗的回調函數(shù)
  function load() {
    return new Promise((resovel, reject) => {
        $.ajax({
            url: 'xxx.com',
            data: 'jsonp',
            success: function(res) {
                resolve(res);
            },
            error: function(err) {
                reject(err);
            }
        });
    });
}

// 用一下
load().then(data => {
    console.log(data);  // 請求到的數(shù)據(jù)
    console.log('請求數(shù)據(jù)成功');
}, err => {
    console.log('請求失敗');
});

除了處理請求,Promise還可以寫在普通的函數(shù)中

function init(options) {
    return new Promise((resolve, reject) => {
        if (options.id) {
            console.log('你是唯一')
            resolve(options.id);
        } else {
            console.log('不行酥宴,不行');
            reject()
        }
    });
}

init({id: 110})
    .then(id => {
        console.log(id);          // 110
        let obj = {id, nickname: '左夕'};
        return obj;
    })
    .then(other => {
        console.log(other);    // { id: 110, nickname: '左夕' }
    });


Promise.all和Promise.race有點類型
all是Promise的狀態(tài)都為成功才表示成功
race是Promise的狀態(tài)是有一個先成功的狀態(tài)了啦吧,就表示成功
最近很火的axios其實就是調用了Promise,寫法也是很相似的
由于它是第三方包幅虑,需要npm i axios安裝一下

// 發(fā)個get請求
axios.get('user/', {
    id,
    username
}).then(res => {
    console.log(res);   // 成功
}).catch(err => {
    console.log(err);   // 失敗
});

// 再來個post請求
axios.post('login/', {
    username,
    password
}).then(res => {
    console.log(res);   // 成功
}).catch(err => {
    console.log(err);   // 失敗
});

// 也有all的操作
function getUser() {
    return axios.get('/user');
}

function sendMsg() {
    return axios.post('/info', {msg});
}

axios.all([getUser(), sendMsg()]).then(res => {})


總結一下:Promise常用的就是這些了丰滑,then返回的也是一個Promise對象,所以可以繼續(xù)調用.then方法。有說的不對的地方褒墨,還望指出炫刷。

?著作權歸作者所有,轉載或內容合作請聯(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
  • 正文 為了忘掉前任翎朱,我火速辦了婚禮,結果婚禮上艰亮,老公的妹妹穿的比我還像新娘闭翩。我一直安慰自己,他們只是感情好迄埃,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布疗韵。 她就那樣靜靜地躺著,像睡著了一般侄非。 火紅的嫁衣襯著肌膚如雪蕉汪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天逞怨,我揣著相機與錄音者疤,去河邊找鬼。 笑死叠赦,一個胖子當著我的面吹牛驹马,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼糯累,長吁一口氣:“原來是場噩夢啊……” “哼算利!你這毒婦竟也來了?” 一聲冷哼從身側響起泳姐,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤效拭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胖秒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缎患,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年阎肝,在試婚紗的時候發(fā)現(xiàn)自己被綠了挤渔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡盗痒,死狀恐怖蚂蕴,靈堂內的尸體忽然破棺而出低散,到底是詐尸還是另有隱情俯邓,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布熔号,位于F島的核電站稽鞭,受9級特大地震影響,放射性物質發(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

推薦閱讀更多精彩內容