34 – Promise 簡介

原文地址:https://dev.to/bhagatparwinder/promises-introduction-5d30

導讀

回調(diào)函數(shù)對于處理耗時任務或后續(xù)會被阻塞的操作很有幫助求豫,但我們也看到了它的一些缺點镊逝,特別是回到地獄汞窗。

為了解決回調(diào)函數(shù)的弊端镀琉,引入了 promise顿肺,它倆之間的關鍵區(qū)別是什么時候使用回調(diào)君纫,我們可以向函數(shù)中傳遞一個回調(diào)奸鬓,然后等到執(zhí)行回調(diào)函數(shù)后可以得到結(jié)果竿开。而在 promise 中谱仪,我們是在 promise 的返回值中使用回調(diào)。

優(yōu)勢

  • Promise 和 回調(diào)函數(shù)當在異步操作中使用時否彩,都是為了解決相同的問題疯攒;Promise 加了一層抽象使得代碼更整潔、函數(shù)化以及更少的錯誤發(fā)生列荔;
  • 我們不需要知道將使用異步操作返回的值的回調(diào)敬尺;
  • Promise 是鏈式調(diào)用可以是代碼結(jié)構(gòu)扁平化而不會引起回調(diào)地獄問題;
  • Promise 內(nèi)置了錯誤處理機制贴浙;
  • 創(chuàng)建

    我們使用 Promise 構(gòu)造函數(shù)來創(chuàng)建 promise:

    const myPromise = new Promise();

    一個 promise 就像一張收據(jù)說我將來需要你的值筷转,Promise 一旦完成(resolve 返回成功信息或 reject 返回錯誤信息),我們將會執(zhí)行后續(xù)動作(例如從后端獲取員工信息)悬而。

    Resolve

    promise 為了完成異步任務呜舒,時間是不固定的。當異步任務還在執(zhí)行的時候笨奠,promise 處在 pending 狀態(tài)袭蝗。一旦完成它將返回值(通常是從異步任務返回的)。

    const myPromise = new Promise((resolve) => {    setTimeout(() => {        resolve("finished async operation");    }, 2000);});myPromise.then((response) => {    console.log(response); // finished async operation});

    發(fā)生了什么:

  • Promise 接受了一個回調(diào)函數(shù)般婆;
  • 回調(diào)函數(shù)內(nèi)部執(zhí)行了一個異步任務到腥;
  • 若任務完成 promise 將會 resolved;
  • 我們使用 setTimeout 來模擬耗時 2s 的異步任務蔚袍;
  • 當 2s 后 或異步任務完成乡范,我們將得到成功的信息或從后端返回的數(shù)據(jù)配名。
  • Reject

    有時候異步任務并不總是按預期返回,我們可能會遇到錯誤晋辆。這種情況下渠脉,我們使用 reject 來提示失敗信息。

    const myPromise = new Promise((resolve, reject) => {    setTimeout(() => {        reject("an error has occurred");    }, 2000)});myPromise.then((response) => {    console.log(response);}, (error) => {    console.log(error); // an error has occurred});

    promise 中的回調(diào)接收兩個參數(shù):resolvereject瓶佳。promise 中的then 操作符能處理兩個回調(diào)函數(shù)芋膘,第一個是處理成功的(resolve),第二個是處理失敗的(reject)霸饲。

    在這個例子中为朋,myPromise 2 秒后產(chǎn)生一個錯誤,只要使用它的都會得到提示:“an error has occurred”厚脉。

    這篇文章只是簡單的介紹了 promise 的一些知識习寸,在下一篇文章中,我們將會重溫鏈式操作傻工、錯誤處理以及并行執(zhí)行 promise霞溪。

    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    • 序言:七十年代末,一起剝皮案震驚了整個濱河市精钮,隨后出現(xiàn)的幾起案子威鹿,更是在濱河造成了極大的恐慌,老刑警劉巖轨香,帶你破解...
      沈念sama閱讀 217,509評論 6 504
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件忽你,死亡現(xiàn)場離奇詭異,居然都是意外死亡臂容,警方通過查閱死者的電腦和手機科雳,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 92,806評論 3 394
    • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脓杉,“玉大人糟秘,你說我怎么就攤上這事∏蛏ⅲ” “怎么了尿赚?”我有些...
      開封第一講書人閱讀 163,875評論 0 354
    • 文/不壞的土叔 我叫張陵,是天一觀的道長蕉堰。 經(jīng)常有香客問我凌净,道長,這世上最難降的妖魔是什么屋讶? 我笑而不...
      開封第一講書人閱讀 58,441評論 1 293
    • 正文 為了忘掉前任冰寻,我火速辦了婚禮,結(jié)果婚禮上皿渗,老公的妹妹穿的比我還像新娘斩芭。我一直安慰自己轻腺,他們只是感情好,可當我...
      茶點故事閱讀 67,488評論 6 392
    • 文/花漫 我一把揭開白布划乖。 她就那樣靜靜地躺著贬养,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迁筛。 梳的紋絲不亂的頭發(fā)上煤蚌,一...
      開封第一講書人閱讀 51,365評論 1 302
    • 那天耕挨,我揣著相機與錄音细卧,去河邊找鬼。 笑死筒占,一個胖子當著我的面吹牛贪庙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翰苫,決...
      沈念sama閱讀 40,190評論 3 418
    • 文/蒼蘭香墨 我猛地睜開眼止邮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奏窑?” 一聲冷哼從身側(cè)響起导披,我...
      開封第一講書人閱讀 39,062評論 0 276
    • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎埃唯,沒想到半個月后撩匕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
      沈念sama閱讀 45,500評論 1 314
    • 正文 獨居荒郊野嶺守林人離奇死亡墨叛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點故事閱讀 37,706評論 3 335
    • 正文 我和宋清朗相戀三年止毕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漠趁。...
      茶點故事閱讀 39,834評論 1 347
    • 序言:一個原本活蹦亂跳的男人離奇死亡扁凛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闯传,到底是詐尸還是另有隱情谨朝,我是刑警寧澤,帶...
      沈念sama閱讀 35,559評論 5 345
    • 正文 年R本政府宣布甥绿,位于F島的核電站字币,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏妹窖。R本人自食惡果不足惜纬朝,卻給世界環(huán)境...
      茶點故事閱讀 41,167評論 3 328
    • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骄呼。 院中可真熱鬧共苛,春花似錦判没、人聲如沸。這莊子的主人今日做“春日...
      開封第一講書人閱讀 31,779評論 0 22
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辟犀,卻和暖如春俏竞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背堂竟。 一陣腳步聲響...
      開封第一講書人閱讀 32,912評論 1 269
    • 我被黑心中介騙來泰國打工魂毁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人出嘹。 一個月前我還...
      沈念sama閱讀 47,958評論 2 370
    • 正文 我出身青樓席楚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親税稼。 傳聞我的和親對象是個殘疾皇子烦秩,可洞房花燭夜當晚...
      茶點故事閱讀 44,779評論 2 354

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