精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Promise到底是個啥?你知道嗎?

開發 前端
Promise 對 axios 的返回結果進行了封裝。所以當你發送一個 axios 請求,會返回一個 Promise 對象。然后你就可以調用 .then、.catch方法了。

1. 回調地域

在學習 Promise 之前,我們先看一下什么是回調地獄:

這里我們模擬三個請求接口:

  • 獲取產品類別
// 1. 獲取類別信息
const getCategory = () => {
  // 模擬請求
  let res = {
    code: 200,
    message: "請求成功",
    data: [
      { id: 1, name: "水果" },
      { id: 2, name: "圖書" },
    ],
  };
  return res;
};
  • 根據類別 id 獲取產品信息
// 2. 根據類別 id 獲取產品信息
const getProductByCategoryId = (categoryId) => {
  // 模擬請求
  let res = {
    code: 200,
    message: "請求成功",
    data: [
      { id: 111, categoryId: 1, name: "蘋果" },
      { id: 112, categoryId: 1, name: "香蕉" },
      { id: 113, categoryId: 1, name: "百香果" },
    ],
  };
  return res;
};
  • 根據產品 id 獲取產品價格
// 3. 根據產品id獲取產品價格
const getPriceByProductId = (productId) => {
  // 模擬請求
  let res = {
    code: 200,
    message: "請求成功",
    data: { id: 1001, productId: 111, price: 112.23, unitPrice: 1235.23 },
  };
  return res;
};

接下來我們去獲取第一個類別下第一個產品的單位價格信息:

let unitPrice = 0.0;
// 獲取產品價格
const getProductPrice = () => {
  let categoryRes = getCategory();
  if (categoryRes.code === 200) {
    let produceRes = getProductByCategoryId(1);
    if (produceRes.code === 200) {
      let priceRes = getPriceByProductId(1);
      if (priceRes.code === 200) {
        unitPrice = res.data.unitPrice;
      }
    }
  }
};

我們發現在 getProductPrice 這個方法中,第一個請求接口的結果要作為第二個請求接口的參數,以此類推就會出現層層嵌套,回調里面套回調,這就是所謂的“回調地獄”。

如果請求的接口太多,那代碼寫起來可就太苦逼了,就跟套娃一樣。

所以為了解決回調地獄的問題,提高代碼的可讀性,Promise 應運而生。

2. 邂逅 Promise

Promise 是異步編程的一種解決方案。它本質上是一個構造函數,可以構建一個 Promise 對象。

Promise 構造函數接受一個函數作為參數,該函數的兩個參數分別是 resolve 和 reject 。對象上有 then、catch、finall 方法。

Promise 有三種狀態:pending、fulfilled、rejected:

  • pending:它的意思是待定的,相當于是一個初始狀態。創建 Promise 對象時就是一個初始狀態。
  • fulfilled:成功。當調用 resolved 方法后,Promise 對象的狀態就會從 pending 切換到 fulfilled,且不可改變。
  • rejected:失敗。當調用 reject 方法后,Promise 對象的狀態就會從 pending 切換到 reject,且不可改變。

看了上面的解釋,你可能還是有點懵逼,接下來我用通俗易懂的語言解釋一下 Promise 是個什么玩意:

1.Promise 就是一個用來封裝 HTTP 請求的工具。

2.我們請求后臺接口獲取數據,如果請求成功,就調用 Promise 的 resolve 方法,并將返回的數據作為該方法的參數。如果請求失敗,就調用 Promise 的 reject 方法,并將返回的錯誤信息作為該方法的參數。

3.然后我們將一個 Promise 對象作為該請求接口的返回值返回。

4.因為該接口返回一個 Promise 對象,所以我們調用該接口的時候就可以直接用.then()處理成功的信息,用 .catch() 處理失敗的信息了。

接下來我們將上面的例子用 Promise 改造一下,有了真實案例,大家對 Promise 的理解就更清晰明了了。

3. 使用 Promise

  • 獲取類別信息
const getCategory = () => {
    // 返回結果封裝成 Promise 對象
    return new Promise((resolve, reject) => {
      // 模擬請求
      let res = {
        code: 200,
        message: "請求成功",
        data: [
          { id: 1, name: "水果" }
        ],
      };
      if (res.code == 200) {
        resolve(res);
      } else {
        reject(res);
      }
    });
  };
  • 根據類別 id 獲取產品信息
const getProductByCategoryId = (categoryId) => {
    return new Promise((resolve, reject) => {
      // 模擬請求
      let res = {
        code: 200,
        message: "請求成功",
        data: [
          { id: 111, categoryId: 1, name: "蘋果" },
          { id: 112, categoryId: 1, name: "香蕉" },
          { id: 113, categoryId: 1, name: "百香果" },
        ],
      };
      if (res.code == 200) {
        resolve(res);
      } else {
        reject(res);
      }
    });
  };
  • 根據產品 id 獲取產品價格
const getPriceByProductId = (productId) => {
    return new Promise((resolve, reject) => {
      // 模擬請求
      let res = {
        code: 200,
        message: "請求成功",
        data: { id: 1001, productId: 111, price: 112.23, unitPrice: 1235.23 },
      };
      if (res.code == 200) {
        resolve(res);
      } else {
        reject(res);
      }
    });
  };
  • 獲取第一個類別下第一個產品的單位價格信息

Promise 最常用的就是鏈式調用格式:

let unitPrice = 0.0;
  // 獲取產品價格
  const getProductPrice = () => {
    getCategory().then(res => {
      // 類別 id
      let id = res.data[0].id;
      // 返回一個 Promise 對象
      return getProductByCategoryId(id);
    }).then(res => {
      // 產品 id
      let id = res.data[0].id;
      return getPriceByProductId(id);
    }).then(res => {
      unitPrice = res.data.unitPrice;
    })
  };

當然我們在日常使用過程中一般都是這種格式:

getMethod().then(res => {
  // 請求成功
  }).catch(error=>{
  // 異常
  }).finally(()=>{
  // 不管成功還是異常都要執行
  })

4. async 和 await

雖然有了 Promise 之后,代碼的可讀性有了很大提高。但是 ES7 又引入了 async 和 await 來簡化 Promise 調用操作,實現了以異步操作像同步的方式去執行。

說白了async 和 await 就是對 Promise 進行了封裝。

語法:

await 和 async 是成對出現的,如果寫了 await 必須要寫 async,否則會報錯。如果只寫 async,那返回的就是一個 Promise 對象

舉例:

let unitPrice = 0.0;
// 獲取產品價格
const getProductPrice = async () => {
  let res1 = await getCategory();
  let categoryId = res1.data[0].id;
  let re2 = await getProductByCategoryId(categoryId);
  let productId = re2.data[0].id;
  let re3 = await getPriceByProductId(productId);
  unitPrice = res3.data.unitPrice;
};

如果只寫 async,返回的就是一個 Promise 對象

const getProductPrice = async () => {
  getCategory().then(res=>{
    let categoryId =  res.data[0].id
  })
};
const getCategory = async () => {
  // 模擬請求
  let res = {
    code: 200,
    message: "請求成功",
    data: [
      { id: 1, name: "水果" },
      { id: 2, name: "圖書" },
    ],
  };
  return res;
};

那為什么說 async 和 await 實現了異步編程同步化呢?

因為 await 這個命令的意思就是等這一行的異步方法執行成功后,然后才能執行下一行代碼,否則就一直等待,下面的代碼就執行不了。

所以雖然請求后臺的接口是異步的,但是 await 在語法層面實現了同步。

5. 答疑

5.1 同步請求和異步請求

同步請求:當發送一個同步請求時,會暫停后面的代碼執行,等待請求的返回結果,然后再繼續執行下一行代碼。

異步請求:當發送一個異步請求時,會繼續執行后面的代碼而不會等待請求的返回結果。當請求完成后,再通過回調函數或事件處理函數來處理返回的數據。

  • 同步請求就會依次打印:1、2。如果第一個方法執行時間比較長,那就一直等待。
const getProductPrice =  () => {
    console.log("1")
};
console.log("2")
  • 異步請求可能會先打印 2,后打印 1。
const getProductPrice = async  () => {
    console.log("1")
};
console.log("2")

5.2 promise 和 axios 什么關系

Promise 是 JavaScript 中用于異步編程的一個對象,而 axios 是 用來發送 HTTP 請求的工具庫。

Promise 對 axios 的返回結果進行了封裝。所以當你發送一個 axios 請求,會返回一個 Promise 對象。然后你就可以調用 .then、.catch方法了。

5.3 promise 和 async/await 什么關系

  • async/await 對 promise 進行了封裝。
  • async/await 是用同步語法去獲取異步請求,徹底消滅回調函數。
  • 只有 async,返回的是 Promise 對象。
  • await 相當于 Promise 的 then
責任編輯:武曉燕 來源: 知否技術
相關推薦

2015-10-23 09:34:16

2022-05-04 08:38:32

Netty網絡框架

2025-10-31 00:00:02

硅光光通信英偉達

2022-12-21 08:04:19

socket圖解網絡

2024-02-07 12:35:00

React并發模式concurrent

2025-10-29 07:33:13

2023-12-20 08:23:53

NIO組件非阻塞

2016-03-03 17:42:10

DockerDCOS

2022-04-10 19:26:07

TypeScript類型語法

2021-05-11 07:30:58

JNIJavaAPI

2021-01-28 17:41:32

Github網站Pull Reques

2022-11-28 00:04:17

2024-01-15 12:16:37

2024-07-30 08:22:47

API前端網關

2024-11-08 09:48:38

異步編程I/O密集

2025-04-07 00:49:00

WindowsmacOS微軟

2024-08-26 14:23:56

2022-09-06 21:38:45

數字人數字孿生

2021-12-16 15:11:59

Facebook天秤幣加密貨幣

2021-12-26 00:01:51

Log4Shell漏洞服務器
點贊
收藏

51CTO技術棧公眾號

色综合网站在线| 国产一区在线精品| 亚洲美女www午夜| 网站一区二区三区| 国产激情小视频在线| 国产福利精品一区| 欧美在线视频免费播放| 日韩一区二区高清| 91理论片午午论夜理片久久| 国产一级久久久| 宅男在线一区| 欧美一区二区三区免费观看视频| 国产亚洲黄色片| 精品资源在线看| 国产一区二区三区不卡在线观看| 国语自产精品视频在线看抢先版图片| 在线免费观看日韩av| 曰本一区二区| 亚洲午夜在线视频| 日本精品一区二区| 高h放荡受浪受bl| 日韩高清在线观看| 久久久久久亚洲精品不卡| 亚洲天堂岛国片| 国产成人精品亚洲线观看| 欧美亚洲高清一区| 国产免费黄色小视频| 免费在线毛片网站| 久久精品一区二区三区不卡| 成人在线免费观看一区| 中文字幕日本人妻久久久免费 | 久久国产精品精品国产色婷婷| 中文字幕 自拍偷拍| 国产又粗又猛又黄视频| 136福利精品导航| 欧美日韩一区中文字幕| 鲁一鲁一鲁一鲁一澡| av在线免费网址| 中文字幕精品一区二区三区精品| 久久久水蜜桃| 天堂8在线视频| 国产成人精品免费看| 国产区亚洲区欧美区| 在线永久看片免费的视频| 一区二区亚洲精品| 精品中文字幕视频| 神马久久精品综合| 天天色天天射综合网| 日韩在线观看免费av| 影音先锋男人在线| 狠狠色狠狠色综合婷婷tag| 亚洲精品久久久久久久久久久久| 性生活一级大片| 福利一区二区免费视频| 欧美亚洲日本国产| 日本成人中文字幕在线| 激情国产在线| 欧美日韩国产在线| 欧美xxxxx在线视频| caoporm在线视频| 国产黄在线观看免费观看不卡| 99这里只有精品| 国产一区二区三区高清视频| 亚洲va天堂va欧美ⅴa在线| 国产一区在线精品| 操人视频欧美| 亚洲男人第一天堂| av不卡在线播放| 精品国产一区二区三区麻豆小说| 日韩一卡二卡在线| 91色九色蝌蚪| 欧洲成人一区二区| aaa在线免费观看| 中文字幕一区不卡| 国产欧美久久久久| 国产在线精彩视频| 91国产免费观看| 色国产在线视频| 91精品在线免费视频| 日韩午夜电影av| 亚洲高清无码久久| 在线日韩一区| 国产一区二区三区在线播放免费观看 | 不卡区在线中文字幕| 久久99久久99小草精品免视看| 九色成人免费视频| 国产成人亚洲欧洲在线| 久久久国产亚洲精品| 国产精品自拍网| 精品免费久久久| www.亚洲人| 日本不卡久久| 国产淫片在线观看| 亚洲成人免费在线观看| 黄色三级视频片| 韩国三级成人在线| 亚洲国产小视频在线观看| 一区二区黄色片| 亚洲成av人电影| 97在线观看免费| 亚洲视频一区在线播放| hitomi一区二区三区精品| 日韩欧美第二区在线观看| 菠萝菠萝蜜在线视频免费观看| 午夜伦欧美伦电影理论片| 狠狠躁狠狠躁视频专区| 超碰成人在线观看| 色噜噜久久综合伊人一本| 久久久久久久久久久97| 奇米影视在线99精品| 99国产超薄丝袜足j在线观看| 日韩欧美亚洲系列| 亚洲激情在线激情| 50路60路老熟妇啪啪| 欧美三级一区| 一本色道久久88综合亚洲精品ⅰ| 免费在线一级片| 美女脱光内衣内裤视频久久网站 | 国产成a人亚洲精v品无码| 久久久久国色av免费看影院| 99热这里只有精品7| 欧洲一级精品| 日韩成人在线视频| 久久免费看少妇高潮v片特黄| 狂野欧美一区| 好吊妞www.84com只有这里才有精品| 波多野结衣一二区| www.亚洲资源| 成人免费在线观看入口| 日本成年人网址| 国产精品流白浆在线观看| 久久精品影视伊人网| 国产精品久久久久久人| 成人av免费在线| 毛片av在线播放| www欧美在线观看| 这里只有精品视频在线| 秋霞精品一区二区三区| gogogo免费视频观看亚洲一| 欧美极品少妇无套实战| 日韩精品视频一区二区三区| 日韩在线播放视频| 在线观看日韩一区二区| 国产人妖乱国产精品人妖| 成人一区二区三| 亚洲日本三级| 国产91精品久久久| 亚洲 美腿 欧美 偷拍| 午夜精品视频在线观看| 国产精品果冻传媒| 国产伊人精品| 国产精品乱码视频| caoporn视频在线观看| 精品国一区二区三区| 国产在线观看免费av| 国产成人精品1024| 全黄性性激高免费视频| 国产精品网在线观看| 538国产精品视频一区二区| 天天干天天干天天干| 黑人巨大精品欧美一区二区免费 | 日韩在线小视频| 亚洲综合网av| 亚洲欧美激情视频在线观看一区二区三区| 欧美女同在线观看| 一区二区三区四区日韩| 成人看片在线| 欧产日产国产精品视频| 亚洲欧美制服丝袜| 亚洲中文一区二区| 欧美国产日韩在线观看| 成人亚洲免费视频| 欧美色一级片| 久久久久久草| 欧美美女被草| 色中色综合影院手机版在线观看| 久久久久久久久久毛片| 日本成人网址| 日韩欧美一区二区视频| 天天操天天爽天天干| 国产亚洲欧洲一区高清在线观看| 亚洲福利精品视频| 综合久久综合| 久久99九九| 国产精品久久久久久妇女| 久热在线中文字幕色999舞| 欧美自拍偷拍第一页| 欧美性xxxxxxx| 波多野结衣久久久久| 成人免费毛片app| 国产精品少妇在线视频| 99久久这里只有精品| 国产精选一区二区| 成人短视频app| 久久天堂av综合合色| 色网站免费观看| 欧美日韩美女一区二区| 久久久久久久久久91| 欧美国产精品一区| 扒开伸进免费视频| 蓝色福利精品导航| 日本中文字幕在线视频观看| 精品色999| 国产精品国产精品国产专区蜜臀ah | 国产精品福利一区二区三区| 中文字幕a在线观看| 久久国产精品99精品国产| 每日在线更新av| 久久久久久久久久久9不雅视频| 精品国产乱码久久久久| 亚洲精品大片| 日本午夜人人精品| 懂色av一区| 日韩亚洲欧美中文在线| 水莓100在线视频| 精品久久久久久久久久久久包黑料| 亚洲成人av网址| 午夜影院久久久| 老妇女50岁三级| 国产精品麻豆一区二区| 日韩一级视频在线观看| 国产mv日韩mv欧美| 看看黄色一级片| 日本亚洲一区二区| 中国丰满人妻videoshd| 欧美午夜电影在线观看 | 午夜精品区一区二区三| 91九色鹿精品国产综合久久香蕉| 国产精品欧美风情| 免费福利视频一区二区三区| 亚洲97在线观看| bl在线肉h视频大尺度| 欧美精品在线观看91| 91在线播放网站| 中文字幕精品国产| 大片免费播放在线视频| 精品一区二区电影| 亚洲av成人精品毛片| 亚洲国产成人爱av在线播放| 精品国产黄色片| 日韩欧美国产精品| 国产视频手机在线观看| 欧美美女一区二区在线观看| 中文字幕第2页| 欧美性高清videossexo| 波多野结衣视频在线看| 欧美在线观看18| 自拍偷拍第八页| 欧美日韩一区 二区 三区 久久精品| 超碰在线观看91| 91国偷自产一区二区三区成为亚洲经典 | 欧洲毛片在线| 亚洲男人第一网站| 精品美女视频在线观看免费软件 | 手机在线看片日韩| 99久久精品99国产精品| 中文字幕乱码一区| 久久这里只有精品首页| 91精品人妻一区二区三区蜜桃欧美| 成人在线高清| 中文字幕一区日韩电影| 男女啪啪在线观看| 久久国产精品电影| 国产嫩草在线视频| 午夜精品久久久久久99热| www.youjizz.com在线| 欧美中文字幕第一页| 精品欧美一区二区三区在线观看| 国产精品毛片a∨一区二区三区|国| 激情久久一区二区| 亚洲综合中文字幕在线观看| 在线日韩成人| 精品视频一区二区三区四区| 亚洲人亚洲人色久| 伊人久久大香线蕉综合75| 久久久久久影院| 天堂8在线天堂资源bt| 亚洲欧美日韩精品一区二区| www.xxx亚洲| 麻豆91精品91久久久的内涵| 永久看看免费大片| 99re热这里只有精品视频| 神马久久久久久久久久久| 一区视频在线播放| 国产精品theporn动漫| 色综合久久久久| 国产免费视频一区二区三区| 精品福利在线导航| 高清毛片在线看| 欧美精品一区二区三区国产精品| 九色porny丨国产首页在线| 国产精品成人av在线| 亚洲91网站| 欧美久久在线| 亚洲国产精品日韩专区av有中文| 亚瑟在线精品视频| 亚洲永久精品ww.7491进入| 国产精品久久久久婷婷二区次| 久久久久久国产精品视频| 日本精品一级二级| 亚洲国产精品久久久久久久| 亚洲精品永久免费| 日本在线视频www鲁啊鲁| 日韩**中文字幕毛片| 日韩中文字幕无砖| 日韩精品成人一区二区在线观看| 欧美国产精品| www.xxx亚洲| eeuss鲁片一区二区三区在线观看| 欧美性猛交xxxx乱大交少妇| 图片区小说区区亚洲影院| 亚洲天堂久久久久| 精品视频在线导航| 一二三四区在线观看| 国产精品久久久av| 久久97久久97精品免视看秋霞| 欧美xxxx吸乳| 免费人成网站在线观看欧美高清| 国产 xxxx| 玉米视频成人免费看| 中文字幕一区二区三区免费看 | 国产精品美女久久| 卡通动漫精品一区二区三区| 青青草视频国产| 蜜桃久久av一区| 久久av无码精品人妻系列试探| 亚洲狠狠爱一区二区三区| 97成人在线观看| 中文国产成人精品久久一| 一区一区三区| 久久99久久99精品蜜柚传媒| 亚洲午夜电影| 激情小说欧美色图| 亚洲精品乱码久久久久| 国产精品久久久久久久成人午夜| 一区二区亚洲欧洲国产日韩| 天天综合av| 精品国产日本| 2019中文字幕在线电影免费 | 亚洲 欧美 精品| 欧美大秀在线观看| 日韩影片在线观看| 91看片淫黄大片91| 国产精品一品二品| 青青草在线观看视频| 欧美一区二区三区人| 久cao在线| 91亚洲精品久久久| 一区二区三区在线观看免费| 亚洲成人手机在线观看| 综合色天天鬼久久鬼色| 国产一区二区三区三州| www.日韩视频| 欧美二区观看| 大荫蒂性生交片| 不卡一卡二卡三乱码免费网站| 久久精品久久国产| 亚洲第一区第二区| 中文在线免费二区三区| 蜜桃免费一区二区三区| 久久久久久一区二区| 欧美a在线播放| 欧美精品丝袜中出| av文字幕在线观看| 国产精品免费在线播放| 亚洲激情一区| 色婷婷av777| 欧美日韩精品一区二区天天拍小说| 日本综合在线| 91久久国产自产拍夜夜嗨| 一区精品久久| 91精品人妻一区二区三区| 色琪琪一区二区三区亚洲区| 日韩在线观看www| 国产精品推荐精品| 久久免费国产| 亚洲综合视频网站| 欧美变态tickling挠脚心| 欧美激情20| 亚洲国产精品综合| 国产福利一区二区三区视频| 国产无人区码熟妇毛片多| 在线观看日韩专区| 国产美女视频一区二区| 奇米精品一区二区三区| 国产日韩欧美在线一区| 99草在线视频| 欧美一级大胆视频| 国产精品成人一区二区不卡| 美女黄色一级视频| 欧美日韩视频在线观看一区二区三区 | 日韩在线免费视频| 一区二区三区在线免费看| av动漫在线观看| 亚洲精品成人悠悠色影视| 免费在线一级视频| 7777精品久久久大香线蕉小说| 欧美专区一区二区三区| 91视频免费在线看| 亚洲午夜未满十八勿入免费观看全集|