最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

async

async函數(shù)定義

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

作用

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

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

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

參數(shù):name 函數(shù)名稱(chēng)

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

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

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

下面為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ù)的返回值看起來(lái)不是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è)語(yǔ)法糖—>語(yǔ)法糖:帶有一定功能的關(guān)鍵字
    • 語(yǔ)法糖的作用:能夠減少代碼量、增加程序的可讀性,從而減少程序代碼出錯(cuò)的機(jī)會(huì)

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

方式一

通過(guò) 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 必須寫(xiě)在 async 中
  • await 后是一個(gè)promise實(shí)例對(duì)象

[[promiseValue]]

[[PromiseValue]]是個(gè)內(nèi)部變量,外部無(wú)法得到,只能在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使得異步代碼看起來(lái)像同步代碼。
  • 函數(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,不需要寫(xiě)匿名函數(shù)處理Promise的resolve的值,也不需要定義多余的data變量,還避免了嵌套代碼。

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

總結(jié)

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

相關(guān)文章

  • node終端里如何連接mysql數(shù)據(jù)庫(kù)并進(jìn)行sql查詢(xún)

    node終端里如何連接mysql數(shù)據(jù)庫(kù)并進(jìn)行sql查詢(xún)

    這篇文章主要為大家介紹了node終端里如何連接mysql數(shù)據(jù)庫(kù)并進(jìn)行sql查詢(xún),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • NodeJS后端開(kāi)發(fā)操作文件之讀寫(xiě)文件

    NodeJS后端開(kāi)發(fā)操作文件之讀寫(xiě)文件

    這篇文章主要介紹了NodeJS后端開(kāi)發(fā)操作文件之讀寫(xiě)文件,操作文件是服務(wù)端一個(gè)基礎(chǔ)的功能,也是做后端開(kāi)發(fā)的必備能力之一,操作文件主要包括讀和寫(xiě)。而這些功能NodeJS都已經(jīng)提供了對(duì)應(yīng)的方法
    2022-06-06
  • Npm link的作用與使用示例代碼

    Npm link的作用與使用示例代碼

    npm link可以幫助我們模擬包安裝后的狀態(tài),它會(huì)在系統(tǒng)中做一個(gè)快捷方式映射,讓本地的包就好像 install 過(guò)一樣,可以直接使用,這篇文章主要介紹了Npm link的作用與使用示例代碼,需要的朋友可以參考下
    2023-01-01
  • electron demo項(xiàng)目npm install安裝失敗的解決方法

    electron demo項(xiàng)目npm install安裝失敗的解決方法

    下面小編就為大家分享一篇electron demo項(xiàng)目npm install安裝失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • 詳解node如何將Excel導(dǎo)入數(shù)據(jù)庫(kù)

    詳解node如何將Excel導(dǎo)入數(shù)據(jù)庫(kù)

    這篇文章主要為大家詳細(xì)介紹了node如何通過(guò)腳本實(shí)現(xiàn)將Excel導(dǎo)入mysql數(shù)據(jù)庫(kù)里,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2024-11-11
  • 簡(jiǎn)單了解node npm cnpm的具體使用方法

    簡(jiǎn)單了解node npm cnpm的具體使用方法

    這篇文章主要介紹了簡(jiǎn)單了解node npm cnpm的具體使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • npm install -g 遇到權(quán)限問(wèn)題解析

    npm install -g 遇到權(quán)限問(wèn)題解析

    這篇文章主要為大家介紹了npm install -g 遇到權(quán)限問(wèn)題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 簡(jiǎn)單聊一聊Node.js參數(shù)max-old-space-size

    簡(jiǎn)單聊一聊Node.js參數(shù)max-old-space-size

    簡(jiǎn)單的說(shuō)Node.js就是運(yùn)行在服務(wù)端的JavaScript,下面這篇文章主要給大家介紹了關(guān)于Node.js參數(shù)max-old-space-size的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • NodeJS簡(jiǎn)單實(shí)現(xiàn)WebSocket功能示例

    NodeJS簡(jiǎn)單實(shí)現(xiàn)WebSocket功能示例

    這篇文章主要介紹了NodeJS簡(jiǎn)單實(shí)現(xiàn)WebSocket功能,結(jié)合具體實(shí)例形式分析了nodejs實(shí)現(xiàn)WebSocket通信功能的客戶(hù)端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • NodeJs的fs讀寫(xiě)刪除移動(dòng)監(jiān)聽(tīng)

    NodeJs的fs讀寫(xiě)刪除移動(dòng)監(jiān)聽(tīng)

    這篇文章主要介紹了NodeJs的fs讀寫(xiě)刪除移動(dòng)監(jiān)聽(tīng),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

丹阳市| 新晃| 长沙市| 四川省| 扎赉特旗| 成安县| 衡阳市| 临夏县| 监利县| 大英县| 咸阳市| 和平县| 长宁县| 罗源县| 封丘县| 肥东县| 老河口市| 荥阳市| 灵山县| 郑州市| 鸡泽县| 南涧| 清新县| 江陵县| 公主岭市| 万荣县| 安塞县| 拉萨市| 麦盖提县| 海南省| 阿拉善盟| 筠连县| 正镶白旗| 隆安县| 观塘区| 团风县| 天镇县| 松阳县| 平顶山市| 北流市| 四川省|