欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端常見面試題之a(chǎn)sync/await和promise的區(qū)別

 更新時(shí)間:2022年07月27日 11:58:00   作者:ice-index  
async/await是異步代碼的新方式,以前的方法有回調(diào)函數(shù)和Promise,下面這篇文章主要給大家介紹了關(guān)于前端常見面試題之a(chǎn)sync/await和promise區(qū)別的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

async

async函數(shù)定義

async函數(shù)是使用關(guān)鍵字聲明的函數(shù)。async 是“異步”的簡(jiǎn)寫,所以應(yīng)該很好理解 async 用于申明一個(gè) function 是異步的。

作用

用于解決:異步程序產(chǎn)生的bug

####async函數(shù)的語法

async function name([param[, param[, ... param]]]) {
    statements 
}

參數(shù):name 函數(shù)名稱

? param 要傳遞給函數(shù)的參數(shù)的名稱

? statements 包含函數(shù)主體的表達(dá)式 ,可以使用await

返回值: 一個(gè)全新的promise,這個(gè)promise要么會(huì)通過一個(gè)由async函數(shù)返回的值被解決,要么會(huì)通過一個(gè)從async函數(shù)中拋出的(或其中沒有被捕獲到的)異常被拒絕

下面為async的具體使用實(shí)例:

 async function foo(p) {
        console.log("foo run",p);
        return 1;
      }
      var res = foo(1);
      console.log(res);//{<fulfilled>: 1}

async函數(shù)一定會(huì)返回一個(gè)promise對(duì)象。如果一個(gè)async函數(shù)的返回值看起來不是promise,那么它將會(huì)被隱式地包裝在一個(gè)promise中。

例如,如下代碼:

async function foo() {
     //promise.[[promiseValue]] 
   return 1
}
//等價(jià)于
function foo() {
   return Promise.resolve(1)
}//{<fulfilled>: 1}

下面是對(duì)async的一些補(bǔ)充:

  • async 本身是一個(gè)語法糖—>語法糖:帶有一定功能的關(guān)鍵字
    • 語法糖的作用:能夠減少代碼量、增加程序的可讀性,從而減少程序代碼出錯(cuò)的機(jī)會(huì)

async 函數(shù)中 return 值如何接受

方式一

通過 promise.then-cb 形參獲取

 async function foo(){
            console.log(222222);
            return 123;
        }
let res = foo();
 res.then(data=>{
            console.log(data);//123
        })

方式二

第二種接受函數(shù)返回值的方式是 await

  (async function (){
           console.log('async run');
           //第二種接受函數(shù)返回值的方式是 await
           let res = await foo();
           console.log(res);
       })()
 async function foo(){
           console.log('foo run');
           return 123;  
       }
 //res作用:接受 async foo函數(shù)返回值 是promise
let res = foo();

await

await定義

await 的意思是等待,所以應(yīng)該很好理解,await 等待某個(gè)操作完成。

作用

await關(guān)鍵字的作用 就是獲取 Promise中返回的內(nèi)容, 獲取的是Promise函數(shù)中resolve或者reject的值(await 作用是獲取promise.[[promiseValue]]的值)

關(guān)于await的注意點(diǎn)

  • await 必須寫在 async 中
  • await 后是一個(gè)promise實(shí)例對(duì)象

[[promiseValue]]

[[PromiseValue]]是個(gè)內(nèi)部變量,外部無法得到,只能在then中獲取。

[promiseValue]哪些能賦值

  • async函數(shù)的return
  • new promise 中 resolve實(shí)參
  • then 中 return (catch finally 中的return)
  • promise.reslove()實(shí)參 promise.reject()實(shí)參

三者的區(qū)別

  • promise和 async/await都是解決異步編程的一種方式,但是async/await使得異步代碼看起來像同步代碼。
  • 函數(shù)前面多了一個(gè)async關(guān)鍵字。await關(guān)鍵字只能用于async定于的函數(shù)內(nèi)。async函數(shù)會(huì)隱式地返回一個(gè)Promise,該promise的resolve值就是return的值。

為什么async/await更好?

使用async函數(shù)可以讓代碼簡(jiǎn)潔很多,不需要像Promise一樣需要then,不需要寫匿名函數(shù)處理Promise的resolve的值,也不需要定義多余的data變量,還避免了嵌套代碼。

async/await 讓 try/catch可以同時(shí)處理同步和異步的錯(cuò)誤。在下面的示例中,try/catch不能處理JSON.parse的錯(cuò)誤,因?yàn)樗赑romise中,我們需要使用.catch,這樣的錯(cuò)誤會(huì)顯得代碼非常的冗余。

總結(jié)

到此這篇關(guān)于前端常見面試題之a(chǎn)sync/await和promise區(qū)別的文章就介紹到這了,更多相關(guān)async/await和promise區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決Linux無法正常安裝與卸載Node.js的方法

    解決Linux無法正常安裝與卸載Node.js的方法

    最近在學(xué)習(xí)node.js,所以下面這篇文章主要給大家介紹了關(guān)于如何解決Linux無法正常安裝與卸載Node.js的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Node8中AsyncHooks異步生命周期

    Node8中AsyncHooks異步生命周期

    這篇文章主要介紹了Node8中AsyncHooks異步生命周期,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Node登錄權(quán)限驗(yàn)證token驗(yàn)證實(shí)現(xiàn)的方法示例

    Node登錄權(quán)限驗(yàn)證token驗(yàn)證實(shí)現(xiàn)的方法示例

    這篇文章主要介紹了Node登錄權(quán)限驗(yàn)證token驗(yàn)證實(shí)現(xiàn)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Node.js數(shù)據(jù)庫(kù)操作之連接MySQL數(shù)據(jù)庫(kù)(一)

    Node.js數(shù)據(jù)庫(kù)操作之連接MySQL數(shù)據(jù)庫(kù)(一)

    前一陣在做項(xiàng)目的時(shí)候,需要通過nodejs連接到MySQL數(shù)據(jù)庫(kù),于是簡(jiǎn)單地學(xué)習(xí)了一下MySQL這個(gè)庫(kù),分享一些學(xué)習(xí)心得給大家,希望對(duì)大家有幫助。下面這篇文章主要介紹了Node.js數(shù)據(jù)庫(kù)操作之連接MySQL數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下。
    2017-03-03
  • socket.io斷線重連的幾種場(chǎng)景及處理方法

    socket.io斷線重連的幾種場(chǎng)景及處理方法

    Socket.IO是一個(gè)庫(kù),可用于在瀏覽器和服務(wù)器之間進(jìn)行實(shí)時(shí),雙向和基于事件的通信,下面這篇文章主要給大家介紹了關(guān)于socket.io斷線重連的幾種場(chǎng)景及處理方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • Node.js簡(jiǎn)單入門前傳

    Node.js簡(jiǎn)單入門前傳

    Node.js 是一個(gè)基于Chrome JavaScript 運(yùn)行時(shí)建立的一個(gè)平臺(tái)。接下來通過本文給大家分享node.js 入門前傳,感興趣的朋友一起看看吧
    2017-08-08
  • koa+mongoose實(shí)現(xiàn)簡(jiǎn)單增刪改查接口的示例代碼

    koa+mongoose實(shí)現(xiàn)簡(jiǎn)單增刪改查接口的示例代碼

    這篇文章主要介紹了koa+mongoose實(shí)現(xiàn)簡(jiǎn)單增刪改查接口的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • 詳解node如何讓一個(gè)端口同時(shí)支持https與http

    詳解node如何讓一個(gè)端口同時(shí)支持https與http

    眾所周知node是一個(gè)高性能的web服務(wù)器,使用它可以很簡(jiǎn)單的創(chuàng)建一個(gè)http或https的服務(wù)器。這篇文章主要介紹了詳解node如何讓一個(gè)端口同時(shí)支持https與http
    2017-07-07
  • Node.js斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    Node.js斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    最近做了個(gè)項(xiàng)目,應(yīng)項(xiàng)目需求,需要傳圖片、Excel等,幾M的大小可以很快就上傳到服務(wù)器,但是大的就需要斷點(diǎn)上傳,本文就介紹一下,感興趣的可以了解一下
    2021-05-05
  • Mac下通過brew安裝指定版本的nodejs教程

    Mac下通過brew安裝指定版本的nodejs教程

    今天小編就為大家分享一篇Mac下通過brew安裝指定版本的nodejs教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評(píng)論