搞定前端面試題——ES6同步與異步機制、async/await的使用以及Promise的使用!!!

文章目錄

    • 同步和異步
    • async/await
    • Promise
            • Promise的概念

同步和異步

? 同步:代碼按照編寫順序逐行執行,后續的代碼必須等待當前正在執行的代碼完成之后才能執行,當遇到耗時的操作(如網絡請求等)時,主線程會被阻塞,直到該操作完成。

? 異步:當遇到耗時的操作發生時,主線程不會被阻塞,主線程會繼續執行后續的代碼,而非等待耗時操作完成。

async/await

? async/await使用同步的方式編寫異步代碼,避免回調地獄。優勢在于處理多個異步操作的情況下,可以使代碼更簡潔易讀。

回調地獄是指過度使用嵌套的回調函數,導致代碼難以閱讀和維護。

async:當一個函數被標記為async后,該函數會返回一個Promise對象

await

  1. 只能在async函數內部使用。
  2. 加上await關鍵字之后,會執行到這一行時暫停函數的剩余部分,等待網絡請求完成,然后繼續執行并獲取到請求返回的數據。
    在這里插入圖片描述

Promise

? Promise表示承諾在未來的某個時刻可能會完成并返回結果。
? 對干某些需要時間來處理結果的操作,如用戶登錄、讀取文件等,可以使用Promise對象來執行異步操作。
? Promise對象有三種狀態pending(待處理)fulfilled(已履行)rejected(被駁回)

  1. 當創建一個Promise對象時,它的初始狀態為pending,表示異步執行還未完成。
  2. 當異步執行成功時,會調用resolve函數把Promise對象的狀態改變為fulfilled,可通過then方法來獲取異步操作的結果。
  3. 當異步執行異常時,會調用reject函數把Promise對象的狀態更改為rejected,可通過catch方法來處理錯誤。

語法模版:

1.new關鍵字聲明了一個Promise對象
2. 這個對象有兩個參數,resolve,reject
3. 聲明了一個變量用來存儲Promise對象的應用
//定義Promise
聲明一個變量 = new Promise((resolve,reject)=>{resolve("已完成方法")reject("未完成方法")
})
//異步操作
Promise.then(result => {console.log("result:",result)	//.then方法獲取resolve()方法
}).catch(error => {console.log("error:",error)		//.catct方法獲取reject()方法
}).finally(()=>{console.log("異步執行結束")		//異步執行之后進行調用,無論是那種結果
})

簡化形式:

聲明一個變量 = new Promise((resolve,reject)=>{resolve("已完成方法")reject("未完成方法")
}).then(result => {console.log("result:",result)
}).catch(error => {console.log("error:",error)
}).finally(()=>{console.log("異步執行結束")
})

異步操作:異步操作是指在程序執行過程中,某個操作不會立即返回結果,而是需要一段時間的等待

Promise的概念

? 因為隨著前端的業務邏輯變的越來越復雜,之前的回調函數不夠用了,多層次的嵌套會導致出現回調地獄,不好維護。所以,為了解決回調地域的問題,這個時候就使用了Promise進行優化。

? Promise也是目前前端解決異步操作多次嵌套回調的最好辦法。

Promise用法:

new Promise(()=>{//方法體1
}).then(()=>{//方法體2})

題目一:宏任務與微任務調用步驟

image-20240713122520810

答案:1243

解析:宏任務就是構造函數,所以const離開執行,Promise.then是微任務,屬于異步操作,所以先執行console.log(4)然后再回來執行.then

題目二:構造函數只執行一次

image-20240713122814037

答案:122

解析:構造函數只執行一次,但是resolve取決于調用了多次.then(then和resolve是綁定的)。

題目三:兩秒之內輸出一個“1”

image-20240713123025828

答案:image-20240713123257392

解析:看到最下面有.then方法,提示使用Promise

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46249.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46249.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46249.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java二十三種設計模式-抽象工廠模式(3/23)

抽象工廠模式:復雜系統的靈活構建者 引言 在軟件開發中,抽象工廠模式是一種提供接口以創建相關或依賴對象族的創建型設計模式。這種模式允許客戶端使用一個共同的接口來創建不同的產品族,而無需指定具體類。 基礎知識,java設計模…

SpringBoot日常:常用數據類型比較

文章目錄 前言基本類型引用類型date類型比較LocalDate類型比較LocalDateTime類型比較Bigdecimal類型比較對象類型比較 前言 在Java中,我們一般分為基本類型的比較和引用類型的比較,下面按照這兩個大分類梳理一下日常用到的類型比較 基本類型 基本數據類型比較主要…

算法 —— LRU算法

算法 —— LRU算法 LRULRU算法的工作原理:實現方法:性能考慮: 模擬過程splice函數對于std::list和std::forward_list基本語法:功能描述: 示例:注意事項: 如果大家已經學習過了Cache的替換算法和…

ElementUIV12相關使用方法

今日內容 零、 復習昨日 零、 復習昨日 一、Element UI Element,一套為開發者、設計師和產品經理準備的基于 Vue 2.0 的桌面端組件庫 官網: https://element.eleme.cn/#/zh-CN Element Plus,基于 Vue 3,面向設計師和開發者的組件庫 官網: htt…

C語言--遞歸

曾經有一個段子:上大學時,我們的c語言老師說:學c時,如果有50%的同學死在了循環上面,那么就有90%的同學死在了遞歸上面。接下來,就來看看遞歸是怎么個事? 一.遞歸的介紹 遞歸是指一個函數直接或…

Spring中的@Transactional什么時候會失效?

在Spring中,Transactional注解用于聲明式事務管理,它可以使方法在事務上下文中執行。然而,Transactional注解有時會失效,這通常是由于以下幾種情況: 1. 非public方法: - Transactional注解默認只能應用…

跨平臺WPF音樂商店應用程序

目錄 一 簡介 二 設計思路 三 源碼 一 簡介 支持在線檢索音樂,支持實時瀏覽當前收藏的音樂及音樂數據的持久化。 二 設計思路 采用MVVM架構,前后端分離,子界面彈出始終位于主界面的中心。 三 源碼 視窗引導啟動源碼: namesp…

MySQL(8)事務

目錄 1.事務; 1.事務: 1.1 如果CURD不加限制會這么樣子? 可能造成數據同時被修改, 數據修改的結果是未知的.(可以想一下之前的搶票線程問題) 1.2 事務概念: 事務就是一組DML語句組成,這些語句在邏輯上存在相關性,這一組DML語句要么全部成功&#xff0…

基于python旅游景點滿意度分析設計與實現

1.1研究背景與意義 1.1.1研究背景 隨著旅游業的快速發展,滿意度分析成為評估旅游景點質量和提升游客體驗的重要手段。海口市作為中國的旅游城市之一,其旅游景點吸引了大量游客。然而,如何科學評估和提升海口市旅游景點的滿意度,…

中電金信-杭州工商銀行|面試真題|2024年

中電金信-杭州工商銀行 JAva集合用過哪些? ArrayList、LinkedList、HashSet、TreeSet、HashMap、LinkedHashMap、ConcurrentHashMap Arraylist和linkbist區別 ArrayList底層是數據,查詢快,增刪慢,線程不安全,效率高LikedList 底…

【概率論三】參數估計:點估計(矩估計、極大似然法)、區間估計

文章目錄 一. 點估計1. 矩估計法2. 極大似然法2.1. 似然函數2.2. 極大似然估計法 3. 評價估計量的標準3.1. 無偏性3.2. 有效性3.3. 一致性 二. 區間估計1. 區間估計的概念2. 正態總體參數的區間估計 參數估計講什么 由樣本來確定未知參數參數估計分為點估計與區間估計 一. 點估…

算法:二叉樹相關

目錄 題目一:單值二叉樹 題目二:二叉樹的最大深度 題目三:相同的樹 題目四:對稱二叉樹 題目五:另一棵樹的子樹 題目六:二叉樹的前序遍歷 題目七:二叉樹遍歷 題目八:根據二叉…

linux搭建mysql主從復制(一主一從)

目錄 0、環境部署 1、主服務器配置 1.1 修改mysql配置文件 1.2 重啟mysql 1.3 為從服務器授權 1.4 查看二進制日志坐標 2、從服務器配置 2.1 修改mysql配置文件 2.2 重啟mysql 2.3 配置主從同步 2.4 開啟主從復制 3、驗證主從復制 3.1 主服務器上創建test…

微服務拆分流程 (黑馬商城拆分商品服務)

1. 創建新module - maven模塊,并引入依賴(可以復制 把不需要的依賴刪掉 ) 2. 新建包com.hmall.xx(業務名),添加和修改啟動類,新建mapper包、domain包 - service包 - controller包 3. 拷貝并修…

4款良心軟件,免費又實用,內存滿了都舍不得卸載

以下幾款高質量軟件,若是不曾體驗,實在是遺憾可惜。 PDF Guru 這是一款開源免費的PDF編輯軟件,打開之后功能一目了然。 可以拆分、合并PDF,也可以給PDF添加水印和密碼,同時也可以去除別人PDF里的水印或密碼&#xff0…

HouseCrafter:平面草稿至3D室內場景的革新之旅

在室內設計、房地產展示和影視布景設計等領域,將平面草稿圖快速轉換為立體的3D場景一直是一個迫切的需求。HouseCrafter,一個創新的AI室內設計方案,正致力于解決這一挑戰。本文將探索HouseCrafter如何將這一過程自動化并提升至新的高度。 一、定位:AI室內設計的革新者 Ho…

Scala之OOP講解

Scala OOP 前序 Scala 為純粹OOP1、不支持基本類型:一切皆為對象 Byte,Int,...2、不支持靜態關鍵字:static 3、支持類型推斷【通過判斷泛型的父子關系來確定泛型類的父子關系>協變,逆變,不變】和類型預定, 動靜…

【iOS】類對象的結構分析

目錄 對象的分類object_getClass和class方法isa流程和繼承鏈分析isa流程實例驗證類的繼承鏈實例驗證 類的結構cache_t結構bits分析實例驗證屬性properties方法methods協議protocolsro類方法 類結構流程圖解 對象的分類 OC中的對象主要可以分為3種:實例對象&#xf…

【React】JSX基礎

一、簡介 JSX是JavaScript XML的縮寫,它是一種在JavaScript代碼中編寫類似HTML模板的結構的方法。JSX是React框架中構建用戶界面(UI)的核心方式之一。 1.什么是JSX JSX允許開發者使用類似HTML的聲明式模板來構建組件。它結合了HTML的直觀性…

TDesign組件庫日常應用的一些注意事項

【前言】Element(餓了么開源組件庫)在國內使用的普及率和覆蓋率高于TDesign-vue(騰訊開源組件庫),這也導致日常開發遇到組件使用上的疑惑時,網上幾乎搜索不到其文章解決方案,只能深挖官方文檔或…