亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
回調(diào):原始方式(和“回調(diào)地獄”)
承諾:一種更好的鏈條異步邏輯的方法
異步/等待:編寫(xiě)看起來(lái)同步的異步代碼
那麼,您今天應(yīng)該使用哪個(gè)?
最後的想法
首頁(yè) web前端 前端問(wèn)答 現(xiàn)代JavaScript:脫神秘的異步/等待,應(yīng)許和回調(diào)

現(xiàn)代JavaScript:脫神秘的異步/等待,應(yīng)許和回調(diào)

Aug 02, 2025 am 05:06 AM

JavaScript使用回調(diào),承諾和異步/等待異步操作; 1?;卣{(diào)是最古老的方法,但導(dǎo)致“回調(diào)地獄”和控制問(wèn)題的反轉(zhuǎn); 2。承諾通過(guò).CATCH()和.catch()鏈提高可讀性和錯(cuò)誤處理; 3。異步/等待,建立在承諾上,使用等待內(nèi)部函數(shù)的函數(shù)和嘗試/捕捉錯(cuò)誤,提供了一種干淨(jìng),同步的語(yǔ)法;如今,異步/等待新代碼的推薦方法由於其清晰度和可維護(hù)性,而在遺產(chǎn)環(huán)境中,應(yīng)避免使用回調(diào)。

現(xiàn)代JavaScript:脫神秘的異步/等待,應(yīng)許和回調(diào)

長(zhǎng)期以來(lái),JavaScript一直是單線程和非障礙物,這意味著它無(wú)法等待慢速操作,例如從服務(wù)器獲取數(shù)據(jù)。為了解決這個(gè)問(wèn)題,JavaScript進(jìn)化了幾種用於處理異步操作的模式:回調(diào),承諾異步/等待。如果您曾經(jīng)對(duì)何時(shí)或?yàn)槭颤N使用每個(gè)人都感到困惑,那麼您並不孤單。讓我們?cè)趯?shí)用的現(xiàn)代背景下將它們分解。

現(xiàn)代JavaScript:脫神秘的異步/等待,應(yīng)許和回調(diào)

回調(diào):原始方式(和“回調(diào)地獄”)

回調(diào)是作為參數(shù)傳遞給其他函數(shù)的函數(shù),在完成任務(wù)後將執(zhí)行。

函數(shù)fetchdata(回調(diào)){
  settimeout(()=> {
    回調(diào)(“獲取數(shù)據(jù)!”);
  },1000);
}

fetchdata((結(jié)果)=> {
  console.log(結(jié)果); //“獲取數(shù)據(jù)!” 1秒後
});

這對(duì)於簡(jiǎn)單的情況很好,但是當(dāng)您進(jìn)行多個(gè)異步操作時(shí)會(huì)出現(xiàn)問(wèn)題:

現(xiàn)代JavaScript:脫神秘的異步/等待,應(yīng)許和回調(diào)
 fetchdata((data1)=> {
  ProcessData(data1,(data2)=> {
    savedata(data2,(data3)=> {
      console.log('全部完成:',data3);
    });
  });
});

這種嵌套被稱(chēng)為“回調(diào)地獄” - 很難閱讀,調(diào)試和維護(hù)。

?關(guān)鍵問(wèn)題:控制倒置。您將邏輯交給另一個(gè)功能,並信任它正確調(diào)用您的回調(diào) - 只有一次。

現(xiàn)代JavaScript:脫神秘的異步/等待,應(yīng)許和回調(diào)

承諾:一種更好的鏈條異步邏輯的方法

承諾通過(guò)表示未來(lái)價(jià)值來(lái)解決許多回調(diào)問(wèn)題。諾言可以待定實(shí)現(xiàn)拒絕。

函數(shù)fetchdata(){
  返回新的承諾((分辨率,拒絕)=> {
    settimeout(()=> {
      分辨(“獲取數(shù)據(jù)!”);
    },1000);
  });
}

fetchdata()
  。然後((結(jié)果)=> {
    console.log(結(jié)果);
  }))
  .catch((錯(cuò)誤)=> {
    Console.Error(“出現(xiàn)問(wèn)題:”,錯(cuò)誤);
  });

現(xiàn)在,您可以乾淨(jìng)地進(jìn)行連鎖操作:

 fetchdata()
  然後(processData)
  然後(Savedata)
  。
  .catch(err => console.error(err));

?好處:

  • 避免深築巢
  • 使用.catch()的集中錯(cuò)誤處理
  • 您可以控制流程而不是交出流程

.then().then().catch()


異步/等待:編寫(xiě)看起來(lái)同步的異步代碼

async/await是在承諾之上構(gòu)建的,可以讓您像同步一樣編寫(xiě)異步代碼 - 而不會(huì)阻止線程。

異步函數(shù)whindata(){
  嘗試 {
    const data1 =等待fetchdata();
    const data2 =等待processData(data1);
    const data3 =等待savedata(data2);
    console.log('完成:',data3);
  } catch(錯(cuò)誤){
    Console.Error('錯(cuò)誤:',錯(cuò)誤);
  }
}

andledata();

這是發(fā)生的事情:

  • async函數(shù)總是回報(bào)諾言
  • await暫停執(zhí)行,直到承諾解決(但不會(huì)阻止線程!)
  • 就像同步代碼一樣,使用try/catch進(jìn)行錯(cuò)誤處理

?專(zhuān)家提示:您可以await任何諾言 - 包括fetch() , setTimeout (帶包裝器)或您自己的自定義異步功能。

您甚至可以並行運(yùn)行操作:

異步函數(shù)loadAll(){
  const [result1,result2] =等待承諾。
    fetch('/api/user'),
    fetch('/api/posts')
  );
  返回{result1,result2};
}

那麼,您今天應(yīng)該使用哪個(gè)?

  • ?回調(diào):除非使用Legacy API,否則請(qǐng)避免在新代碼中。它們?nèi)菀壮鲥e(cuò),難以擴(kuò)展。
  • ?承諾:非常適合簡(jiǎn)單鏈,或者當(dāng)您無(wú)法使用async/await (例如,在較舊環(huán)境中的頂級(jí)代碼)。
  • ??異步/等待:現(xiàn)代標(biāo)準(zhǔn)。在幾乎所有新的異步代碼中使用它 - 更清潔,更易於調(diào)試,並且更可讀。

??記?。?await僅在async功能中起作用。因此,除非回調(diào)為async ,否則您不能直接在.map().forEach()中使用它。


最後的想法

回調(diào)的演變→承諾→異步/等待,將JavaScript的增長(zhǎng)轉(zhuǎn)化為用於復(fù)雜應(yīng)用程序的強(qiáng)大語(yǔ)言。雖然您仍然會(huì)在較舊的代碼或node.js apis中遇到回調(diào),但是現(xiàn)代javascript偏愛(ài)異步/等待清晰度和可維護(hù)性。

了解它們?nèi)绾我黄鸸ぷ?-異步/等待的是句法糖,而不是承諾取代了回調(diào)的陷阱- 使您有能力閱讀,調(diào)試和編寫(xiě)更好的異步代碼。

基本上,除非有理由不這樣做,否則請(qǐng)使用async/await ?,F(xiàn)在您知道為什麼它有效。

以上是現(xiàn)代JavaScript:脫神秘的異步/等待,應(yīng)許和回調(diào)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

React如何處理焦點(diǎn)管理和可訪問(wèn)性? React如何處理焦點(diǎn)管理和可訪問(wèn)性? Jul 08, 2025 am 02:34 AM

React本身不直接管理焦點(diǎn)或可訪問(wèn)性,但提供了有效處理這些問(wèn)題的工具。 1.使用Refs來(lái)編程管理焦點(diǎn),如通過(guò)useRef設(shè)置元素焦點(diǎn);2.利用ARIA屬性提升可訪問(wèn)性,如定義tab組件的結(jié)構(gòu)與狀態(tài);3.關(guān)注鍵盤(pán)導(dǎo)航,確保模態(tài)框等組件內(nèi)的焦點(diǎn)邏輯清晰;4.盡量使用原生HTML元素以減少自定義實(shí)現(xiàn)的工作量和錯(cuò)誤風(fēng)險(xiǎn);5.React通過(guò)控制DOM和添加ARIA屬性輔助可訪問(wèn)性實(shí)現(xiàn),但正確使用仍依賴(lài)開(kāi)發(fā)者。

描述React測(cè)試中淺渲染和完全渲染之間的差異。 描述React測(cè)試中淺渲染和完全渲染之間的差異。 Jul 06, 2025 am 02:32 AM

showrendering -testSacomponentInisolation,沒(méi)有孩子,fullrenderingIncludesallChildComponents.shallowrenderingisgoodisgoodisgoodisteStingEcompontingAcomponent’SownLogicAndMarkup,OustereringFasterExecutionexecutionexecutionexecutionexecutionAndisoLationAndIsolationFromChildBehaviorFromChildBehavior,ButlackSsspullllfllllllllflllllifeCycleanDdominte

嚴(yán)格模式組件在React中的意義是什麼? 嚴(yán)格模式組件在React中的意義是什麼? Jul 06, 2025 am 02:33 AM

StrictMode在React中不會(huì)渲染任何視覺(jué)內(nèi)容,但它在開(kāi)發(fā)過(guò)程中非常有用。其主要作用是幫助開(kāi)發(fā)者發(fā)現(xiàn)潛在問(wèn)題,特別是那些可能導(dǎo)致複雜應(yīng)用中出現(xiàn)bug或意外行為的問(wèn)題。具體來(lái)說(shuō),它會(huì)標(biāo)記不安全的生命週期方法、識(shí)別render函數(shù)中的副作用,並警告關(guān)於舊版字符串refAPI的使用。此外,它還能通過(guò)有意重複調(diào)用某些函數(shù)來(lái)暴露這些副作用,從而促使開(kāi)發(fā)者將相關(guān)操作移至合適的位置,如useEffect鉤子。同時(shí),它鼓勵(lì)使用較新的ref方式如useRef或回調(diào)ref代替字符串ref。為有效使用Stri

帶有打字稿集成指南的VUE 帶有打字稿集成指南的VUE Jul 05, 2025 am 02:29 AM

使用VueCLI或Vite創(chuàng)建支持TypeScript的項(xiàng)目,可通過(guò)交互選擇功能或使用模板快速初始化。在組件中使用標(biāo)籤配合defineComponent實(shí)現(xiàn)類(lèi)型推斷,並建議明確聲明props、emits類(lèi)型,使用interface或type定義復(fù)雜結(jié)構(gòu)。推薦在setup函數(shù)中使用ref和reactive時(shí)顯式標(biāo)註類(lèi)型,以提升代碼可維護(hù)性和協(xié)作效率。

如何處理Vue中的形式 如何處理Vue中的形式 Jul 04, 2025 am 03:10 AM

處理Vue表單需掌握三個(gè)關(guān)鍵點(diǎn):1.使用v-model實(shí)現(xiàn)雙向綁定,同步表單數(shù)據(jù);2.實(shí)施驗(yàn)證邏輯,確保輸入合規(guī);3.控制提交行為,處理請(qǐng)求與狀態(tài)反饋。在Vue中,通過(guò)v-model可將輸入框、複選框等表單元素與data屬性綁定,如可自動(dòng)同步用戶(hù)輸入;對(duì)於復(fù)選框多選場(chǎng)景,應(yīng)將綁定字段初始化為數(shù)組以正確存儲(chǔ)多個(gè)選值。表單驗(yàn)證可通過(guò)自定義函數(shù)或第三方庫(kù)實(shí)現(xiàn),常見(jiàn)做法包括檢查字段是否為空、使用正則校驗(yàn)格式,並在錯(cuò)誤時(shí)顯示提示信息;例如編寫(xiě)validateForm方法返回各字段的錯(cuò)誤信息對(duì)象。提交時(shí)應(yīng)使

使用Next.js解釋的服務(wù)器端渲染 使用Next.js解釋的服務(wù)器端渲染 Jul 23, 2025 am 01:39 AM

Server-siderendering(SSR)inNext.jsgeneratesHTMLontheserverforeachrequest,improvingperformanceandSEO.1.SSRisidealfordynamiccontentthatchangesfrequently,suchasuserdashboards.2.ItusesgetServerSidePropstofetchdataperrequestandpassittothecomponent.3.UseSS

深入研究前端開(kāi)發(fā)人員的WebAssembly(WASM) 深入研究前端開(kāi)發(fā)人員的WebAssembly(WASM) Jul 27, 2025 am 12:32 AM

WebAssembly(WASM)isagame-changerforfront-enddevelopersseekinghigh-performancewebapplications.1.WASMisabinaryinstructionformatthatrunsatnear-nativespeed,enablinglanguageslikeRust,C ,andGotoexecuteinthebrowser.2.ItcomplementsJavaScriptratherthanreplac

什麼是內(nèi)容安全策略CSP 什麼是內(nèi)容安全策略CSP Jul 04, 2025 am 03:21 AM

內(nèi)容安全策略(CSP)通過(guò)限製網(wǎng)頁(yè)資源加載來(lái)源,防止XSS等攻擊。其核心機(jī)制是設(shè)置白名單,阻止非授權(quán)腳本執(zhí)行。啟用步驟包括:1.定義策略,明確允許的資源來(lái)源;2.在服務(wù)器添加Content-Security-PolicyHTTP頭;3.初期使用Report-Only模式測(cè)試並調(diào)試;4.持續(xù)監(jiān)控與優(yōu)化策略,確保不影響正常功能。注意事項(xiàng)包括處理內(nèi)聯(lián)腳本、謹(jǐn)慎使用第三方資源、兼容性支持及不可替代其他安全措施。

See all articles