日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

掌握Promise:從基礎到高級應用的全面指

來源: 責編: 時間:2024-07-09 18:18:35 787觀看
導讀在JavaScript的異步編程領域,Promise無疑是一顆閃耀的明星。它為處理那些麻煩的延遲操作提供了一種簡潔而高效的解決方案。1 Promise的基本概念首先,我們得明白Promise是個啥。簡單來說,Promise就是一個代表了尚未完成但

在JavaScript的異步編程領域,Promise無疑是一顆閃耀的明星。它為處理那些麻煩的延遲操作提供了一種簡潔而高效的解決方案。hIq28資訊網——每日最新資訊28at.com

1 Promise的基本概念

首先,我們得明白Promise是個啥。簡單來說,Promise就是一個代表了尚未完成但預計在未來會完成的操作的容器。它非常類似于一個你會在日后打開的盒子,盒子里可能是你想要的答案,也可能是個壞消息。hIq28資訊網——每日最新資訊28at.com

創建一個Promise就像制作這樣一個盒子。你用new Promise來制作,里面填上你的異步操作,比如發起一個網絡請求或者讀取一個文件。hIq28資訊網——每日最新資訊28at.com

Promise有三種狀態:pending(待定)、fulfilled(實現)和rejected(拒絕)。一開始,Promise是pending,表示操作還未完成。一旦操作成功,狀態就會變成fulfilled;如果出了岔子,狀態就會變成rejected。而且,一旦狀態改變,就沒法再變回去了。hIq28資訊網——每日最新資訊28at.com

2 使用.then()和.catch()方法

在JavaScript中,.then()和.catch()是Promise對象的方法,用于處理異步操作的結果。hIq28資訊網——每日最新資訊28at.com

  • .then()方法:當Promise對象的狀態變為fulfilled(已實現)時,會調用.then()方法中的回調函數,并將異步操作的結果作為參數傳遞給回調函數。.then()方法返回一個新的Promise對象,可以鏈式調用多個.then()方法來處理不同的結果。
const promise = new Promise((resolve, reject) => {  setTimeout(() => {    resolve('成功');  }, 1000);});promise.then((result) => {  console.log(result); // 輸出 "成功"}).then((result) => {  console.log('第二個 then');});
  • .catch()方法:當Promise對象的狀態變為rejected(已拒絕)時,會調用.catch()方法中的回調函數,并將錯誤信息作為參數傳遞給回調函數。.catch()方法也可以鏈式調用,用于捕獲前面所有.then()中拋出的錯誤。
const promise = new Promise((resolve, reject) => {  setTimeout(() => {    reject('失敗');  }, 1000);});promise.then((result) => {  console.log(result);}).catch((error) => {  console.log(error); // 輸出 "失敗"});

如果Promise對象的狀態已經是fulfilled或rejected,那么后續的.then()和.catch()將不會執行。另外,如果在.then()中拋出了異常,那么這個異常會被后面的.catch()捕獲。hIq28資訊網——每日最新資訊28at.com

3 并發執行和Promise的靜態方法

有時候,你需要同時運行多個Promise。這時,Promise.all()和Promise.race()就派上了用場。Promise.all()會等待所有的Promise都完成,然后才繼續。而Promise.race()則不那么耐心,只要有一個Promise完成,不管是fulfilled還是rejected,它就會立即繼續。hIq28資訊網——每日最新資訊28at.com

  1. Promise.all(iterable): 這個方法接收一個包含多個Promise對象的可迭代對象(如數組),并返回一個新的Promise對象。這個新的Promise對象會在所有傳入的Promise對象都成功完成時變為fulfilled狀態,并將每個Promise的結果組成一個數組作為參數傳遞給回調函數。如果任何一個Promise失敗,那么新的Promise對象會立即變為rejected狀態,并將第一個失敗的原因作為參數傳遞給回調函數。
const promise1 = Promise.resolve(3);const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'foo'));const promise3 = Promise.resolve(5);Promise.all([promise1, promise2, promise3]).then((values) => {  console.log(values); // 輸出 [3, "foo", 5]}).catch((error) => {  console.log(error);});
  1. Promise.race(iterable): 這個方法也接收一個包含多個Promise對象的可迭代對象,但與Promise.all()不同,它返回一個新的Promise對象,該對象會在傳入的Promise對象中的任意一個完成或失敗時立即改變狀態。無論哪個Promise先完成或失敗,都會將相應的結果或原因傳遞給回調函數。
const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 500, 'one'));const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 100, 'two'));Promise.race([promise1, promise2]).then((value) => {  console.log(value); // 輸出 "two"}).catch((error) => {  console.log(error);});

Promise.all()和Promise.race()都是異步操作,它們不會阻塞代碼的執行。這意味著你可以在等待這些Promise完成的同時繼續執行其他任務。hIq28資訊網——每日最新資訊28at.com

4 高級技巧:Promise.prototype.finally()

Promise.prototype.finally()是Promise原型上的一個方法,它用于在Promise鏈的末尾添加一個最終處理程序,無論Promise的狀態是fulfilled還是rejected,這個處理程序都會被調用。這就像是不管你去參加派對后心情如何,回家總是要做的。hIq28資訊網——每日最新資訊28at.com

4.1 作用

  • finally()方法的主要作用是在Promise鏈的最后添加清理或收尾工作,比如關閉文件、釋放資源、清除定時器等。
  • 這個方法接受一個回調函數作為參數,這個回調函數沒有參數,也不返回值。

4.2 用法

const promise = new Promise((resolve, reject) => {  // ...異步操作});promise  .then(result => {    // ...處理成功結果  })  .catch(error => {    // ...處理錯誤  })  .finally(() => {    // ...執行清理或收尾工作  });

4.3 特點

  1. 始終執行:無論前面的then()或catch()是否拋出異常,finally()中的回調函數都會被執行。
  2. 無參數:finally()中的回調函數不接收任何參數,這意味著它不能直接訪問到then()或catch()中的結果或錯誤。
  3. 返回新的Promise:如果finally()中的回調函數拋出異常,或者返回一個新的Promise,那么這個新的Promise會成為finally()方法的返回值。

4.4 技巧

  • 鏈式調用:finally()可以與其他Promise方法進行鏈式調用。
  • 錯誤處理:在finally()中可以進行一些通用的錯誤處理,比如記錄日志、發送錯誤報告等。
  • 資源清理:finally()非常適合用來執行一些無論成功還是失敗都需要進行的資源清理工作。
fetch('https://api.example.com/data')  .then(response => response.json())  .then(data => {    console.log(data);    return data;  })  .catch(error => {    console.error('Error:', error);  })  .finally(() => {    console.log('Fetch completed');  });

上述代碼中,無論fetch()請求成功還是失敗,都會在控制臺輸出"Fetch completed"。hIq28資訊網——每日最新資訊28at.com

5 ES6的async/await

在ES6中,async/await是一種處理異步操作的新方法,它基于Promise實現,但提供了更加簡潔和直觀的語法。hIq28資訊網——每日最新資訊28at.com

  • async關鍵字:用于聲明一個函數為異步函數。一個被async修飾的函數會自動將返回值包裝成一個Promise對象。如果返回值是thenable對象,那么會等待其解析為最終值;如果返回值是一個原始值,那么會直接解析為該值。
async function asyncFunc() {  return 'hello';}const result = asyncFunc(); // result是一個Promise對象result.then(console.log); // 輸出 "hello"
  • await關鍵字:用于在async函數內部等待一個Promise解析為最終值。await暫停代碼執行,直到Promise解析完成,然后返回解析值。如果Promise被拒絕,那么await會拋出異常。
async function asyncFunc() {  const result = await new Promise((resolve, reject) => setTimeout(resolve, 1000, 'world'));  console.log(result); // 1秒后輸出 "world"}asyncFunc();

使用async/await的優勢:hIq28資訊網——每日最新資訊28at.com

  • 更簡潔:不需要使用.then()鏈或.catch()來處理結果和錯誤。
  • 更好的錯誤處理:可以使用正常的try/catch語句來捕獲異常。
  • 順序執行:可以更容易地保證異步操作按預期的順序執行。
async function fetchData(url) {  try {    const response = await fetch(url);    if (!response.ok) {      throw new Error('Network response was not ok');    }    const data = await response.json();    console.log(data);  } catch (error) {    console.error('There has been a problem with your fetch operation:', error);  }}fetchData('https://api.example.com/data');

我們定義了一個異步函數fetchData,它接受一個URL作為參數。我們使用await來等待fetch()請求的結果,然后再等待將響應體解析為JSON。如果在這個過程中發生任何錯誤,我們可以使用try/catch語句來捕獲并處理它。hIq28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-99892-0.html掌握Promise:從基礎到高級應用的全面指

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: SpringBoot 加密解密新招

下一篇: 使用Spring Boot和FFmpeg解決視頻會議系統錄制和回放功能

標簽:
  • 熱門焦點
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發仿造稿定設計的圖片編輯器到現在,不知不覺已過去一年時間了,期間我經歷了裁員失業、面試找工作碰壁,寒冬下一直沒有很好地履行計劃.....這些就放在日
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的“在線鑒別”,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之“想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!”曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的“網紅”。7月5日至9日,為期5天的東方甄選“甘肅行”首次在自有App內直播,
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創 作者|程心 羅輯2023年之前,對于自己的“今天”,百度也很迷茫。“新業務到 2022 年底還是 0,希望 2023 年出來一個 1。”這是2022年底,李彥宏
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久躁日日躁aaaaxxxx| 久久综合九色99| 久久久久久久久蜜桃| 国产欧美短视频| 亚洲欧美日本国产有色| 国产精品久久久久77777| 一区二区高清在线观看| 欧美日韩国语| 久久精品国产亚洲高清剧情介绍| 亚洲精品乱码视频| 亚洲视频1区2区| 久久精品国产久精国产爱| 欧美大片在线观看一区二区| 欧美日韩精品一区二区三区四区 | 欧美激情第一页xxx| 欧美午夜欧美| 黄色成人在线免费| 99国内精品| 欧美日韩国产综合视频在线观看 | 麻豆精品一区二区综合av| 欧美日韩在线观看一区二区三区| 国产日产精品一区二区三区四区的观看方式| 激情六月婷婷综合| 中文国产亚洲喷潮| 久久五月天婷婷| 国产精品国产三级国产aⅴ无密码| 国产一区二区三区网站| 99国产成+人+综合+亚洲欧美| 久久av二区| 欧美日韩精品欧美日韩精品| 黄色另类av| 亚洲一区二区免费看| 狂野欧美激情性xxxx| 国产精品色一区二区三区| 亚洲国产精品欧美一二99| 欧美一级片在线播放| 欧美精品日韩综合在线| 国内精品免费午夜毛片| 亚洲综合欧美日韩| 欧美激情日韩| 伊人男人综合视频网| 性感少妇一区| 欧美性做爰毛片| 亚洲精品日产精品乱码不卡| 久久久精品五月天| 国产精品国码视频| 日韩一级精品视频在线观看| 另类春色校园亚洲| 国产一区二区三区在线观看网站| 亚洲网站在线播放| 欧美精品在线看| 在线免费精品视频| 久久九九精品99国产精品| 国产精品免费看片| 在线综合视频| 欧美日本亚洲视频| 亚洲日韩中文字幕在线播放| 久久亚洲视频| 黄色一区三区| 欧美中文在线观看国产| 国产精品国产三级国产| 一本一本久久a久久精品综合麻豆| 麻豆精品视频在线| 悠悠资源网久久精品| 久久都是精品| 国产一区二区三区电影在线观看 | 欧美激情导航| 亚洲黄色免费电影| 久久婷婷国产综合尤物精品| 国产自产女人91一区在线观看| 亚洲在线观看| 国产精品蜜臀在线观看| 亚洲一级在线| 国产精品分类| 亚洲男女毛片无遮挡| 欧美午夜精品久久久久久孕妇| 99av国产精品欲麻豆| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美亚洲免费在线| 国产精品永久免费观看| 午夜精品一区二区在线观看| 国产精品乱子乱xxxx| 亚洲免费视频一区二区| 国产精品一区二区三区免费观看| 亚洲男女自偷自拍图片另类| 国产精品视频久久一区| 亚洲欧美精品suv| 国产精品一区二区黑丝| 香蕉久久一区二区不卡无毒影院| 国产日韩av在线播放| 欧美自拍偷拍| 激情一区二区| 欧美1区2区| 91久久线看在观草草青青| 欧美顶级艳妇交换群宴| 亚洲精品一级| 欧美午夜一区二区| 午夜精品一区二区三区在线视| 国产视频久久| 久久综合婷婷| 亚洲另类在线一区| 欧美日韩一级片在线观看| 亚洲一区免费网站| 国产色综合天天综合网| 麻豆精品视频| 99国产精品国产精品毛片| 国产精品乱码久久久久久| 欧美在线免费一级片| 永久免费毛片在线播放不卡| 欧美成人第一页| 一区二区三区高清视频在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 欧美亚洲免费电影| 亚洲第一综合天堂另类专| 欧美日韩高清不卡| 亚欧成人在线| 91久久国产自产拍夜夜嗨 | 最新中文字幕一区二区三区| 欧美日韩中文在线观看| 欧美在线www| 亚洲国产精品激情在线观看| 欧美视频在线观看一区| 久久本道综合色狠狠五月| 亚洲激情二区| 国产精品视频一二三| 久久亚洲一区二区三区四区| 一本久道久久综合狠狠爱| 国产日韩一区欧美| 欧美激情一区二区三区四区| 午夜综合激情| 亚洲精品视频在线观看网站| 国产乱码精品一区二区三区忘忧草 | 亚洲一区二区精品视频| 狠狠狠色丁香婷婷综合激情| 欧美日韩精品免费在线观看视频| 久久爱www.| 一本色道久久综合狠狠躁篇怎么玩| 国产情人节一区| 欧美精品久久久久久久久久| 欧美一区二区三区播放老司机| 91久久精品一区| 国产一区二区精品久久91| 亚洲国产天堂久久国产91| 欧美天天视频| 免费一级欧美片在线播放| 亚洲欧美韩国| 亚洲理论在线观看| 黄色在线一区| 国产精品视频网址| 欧美区二区三区| 久久嫩草精品久久久精品一| 亚洲午夜av| 亚洲欧洲一区二区三区在线观看| 国产欧美大片| 欧美日韩一区二区三区免费| 老色鬼精品视频在线观看播放| 亚洲欧美日韩中文播放| 日韩写真视频在线观看| 黄色在线一区| 国产欧美精品一区二区色综合| 欧美日韩国语| 免费欧美在线| 久久精品日产第一区二区| 亚洲天堂男人| 亚洲精品一级| 亚洲第一二三四五区| 国产情人节一区| 国产精品高潮久久| 欧美精品性视频| 免费久久99精品国产自在现线| 欧美一区二区三区在线观看视频| 日韩一区二区精品视频| 在线日韩电影| 精品69视频一区二区三区| 国产欧美日韩视频在线观看| 国产精品jizz在线观看美国 | 欧美亚洲三区| 亚洲在线成人| 亚洲五月婷婷| 一区二区日韩免费看| 国产精品欧美在线| 欧美日韩国产探花| 欧美国产精品人人做人人爱| 久久综合国产精品| 久久精品国产69国产精品亚洲| 亚洲一区二区视频| 在线视频亚洲欧美| 亚洲精品一区二区三区av| 亚洲国产福利在线| 亚洲大黄网站| 亚洲国产老妈| 亚洲激情中文1区| 91久久香蕉国产日韩欧美9色| 亚洲第一主播视频| 亚洲国产精品成人精品| 在线观看国产精品网站| 影音先锋国产精品| 在线观看久久av| **性色生活片久久毛片| 亚洲动漫精品| 亚洲精品一区久久久久久 | 免费成人在线视频网站| 欧美69wwwcom| 欧美大片在线观看|