国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

同步函數(shù) return 一個(gè)異步結(jié)果

oneasp / 2626人閱讀

摘要:前一陣子,需求中有這樣一個(gè)場景訪問一個(gè)頁面,然后需要封裝為一個(gè)方法,這個(gè)方法需要返回訪問這個(gè)頁面的結(jié)果。大概把需求抽象一下就可以變成一個(gè)方法需要返回一個(gè)異步的結(jié)果。如果不是,會(huì)被轉(zhuǎn)成一個(gè)立即的對象。

前一陣子,需求中有這樣一個(gè)場景:
訪問一個(gè)頁面,然后需要封裝為一個(gè)方法,這個(gè)方法需要返回訪問這個(gè)頁面的結(jié)果。大概把需求抽象一下就可以變成:一個(gè)方法 fn 需要返回一個(gè)異步的結(jié)果。直觀的用代碼體現(xiàn):

function fn(){
  setTimeout(()=>{
    return 5
  },200)
}
fn()

如果直接這樣寫,可以看到返回的是 undefined。因?yàn)?fn 本身并沒有返回值。代碼中的 return 實(shí)際上是異步回調(diào)的返回值,沒有什么意義。
那我試著用 promise 來包裝一下這個(gè)異步的過程:

function fn(){
  let p = new Promise(res=>{
    setTimeout(()=>{
      res(5)
    },200)
  })
  return p 
}
fn()

這時(shí)候,我們可以看到返回的是一個(gè) pending 的 promise 對象。然后我們加上神奇的 await:

await fn()

可以看到返回就是我們的預(yù)期了。

然后,我們查閱文檔看下 await 的介紹:

await 命令 正常情況下,await命令后面是一個(gè) Promise 對象。如果不是,會(huì)被轉(zhuǎn)成一個(gè)立即resolve的 Promise
對象。

這就不難理解為什么這樣寫可以實(shí)現(xiàn)我們的預(yù)期了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/96968.html

相關(guān)文章

  • js學(xué)習(xí)之異步處理

    摘要:學(xué)習(xí)開發(fā),無論是前端開發(fā)還是都避免不了要接觸異步編程這個(gè)問題就和其它大多數(shù)以多線程同步為主的編程語言不同的主要設(shè)計(jì)是單線程異步模型。由于異步編程可以實(shí)現(xiàn)非阻塞的調(diào)用效果,引入異步編程自然就是順理成章的事情了。 學(xué)習(xí)js開發(fā),無論是前端開發(fā)還是node.js,都避免不了要接觸異步編程這個(gè)問題,就和其它大多數(shù)以多線程同步為主的編程語言不同,js的主要設(shè)計(jì)是單線程異步模型。正因?yàn)閖s天生的與...

    VioletJack 評論0 收藏0
  • 淺析JavaScript異步

    摘要:回調(diào)函數(shù),一般在同步情境下是最后執(zhí)行的,而在異步情境下有可能不執(zhí)行,因?yàn)槭录]有被觸發(fā)或者條件不滿足。同步方式請求異步同步請求當(dāng)請求開始發(fā)送時(shí),瀏覽器事件線程通知主線程,讓線程發(fā)送數(shù)據(jù)請求,主線程收到 一直以來都知道JavaScript是一門單線程語言,在筆試過程中不斷的遇到一些輸出結(jié)果的問題,考量的是對異步編程掌握情況。一般被問到異步的時(shí)候腦子里第一反應(yīng)就是Ajax,setTimse...

    Tangpj 評論0 收藏0
  • JavaScript 異步進(jìn)化史

    摘要:簽訂協(xié)議的兩方分別是異步接口和。在異步函數(shù)中,使用異常捕獲的方案,代替了的異常捕獲的方案。需要注意的是,在異步函數(shù)中使異步函數(shù)用時(shí)要使用,不然異步函會(huì)被同步執(zhí)行。 同步與異步 通常,代碼是由上往下依次執(zhí)行的。如果有多個(gè)任務(wù),就必需排隊(duì),前一個(gè)任務(wù)完成,后一個(gè)任務(wù)才會(huì)執(zhí)行。這種執(zhí)行模式稱之為: 同步(synchronous) 。新手容易把計(jì)算機(jī)用語中的同步,和日常用語中的同步弄混淆。如,...

    luzhuqun 評論0 收藏0
  • 理解async/await

    摘要:所謂異步,就是調(diào)用在發(fā)出后,這個(gè)調(diào)用就直接返回了,調(diào)用者不會(huì)立即得到結(jié)果,但是不會(huì)阻塞,可以繼續(xù)執(zhí)行后續(xù)操作,而被調(diào)用者執(zhí)行得到結(jié)果后通過狀態(tài)事件來通知調(diào)用者使用回調(diào)函數(shù)來處理這個(gè)結(jié)果。另外狀態(tài)的回調(diào)函數(shù)是可省略的。 首先明確一個(gè)問題,為什么 Node.js 需要異步編程? JavaScript 是單線程的,在發(fā)出一個(gè)調(diào)用時(shí),在沒有得到結(jié)果之前,該調(diào)用就不返回,意思就是調(diào)用者主動(dòng)等待...

    luodongseu 評論0 收藏0
  • 《Node.js設(shè)計(jì)模式》Node.js基本模式

    摘要:回調(diào)函數(shù)是在異步操作完成后傳播其操作結(jié)果的函數(shù),總是用來替代同步操作的返回指令。下面的圖片顯示了中事件循環(huán)過程當(dāng)異步操作完成時(shí),執(zhí)行權(quán)就會(huì)交給這個(gè)異步操作開始的地方,即回調(diào)函數(shù)。 本系列文章為《Node.js Design Patterns Second Edition》的原文翻譯和讀書筆記,在GitHub連載更新,同步翻譯版鏈接。 歡迎關(guān)注我的專欄,之后的博文將在專欄同步: Enc...

    Seay 評論0 收藏0
  • async/await 更好的異步解決方案

    摘要:大家都一直在嘗試使用更好的方案來解決這些問題。這是一個(gè)用同步的思維來解決異步問題的方案。當(dāng)我們發(fā)出了請求,并不會(huì)等待響應(yīng)結(jié)果,而是會(huì)繼續(xù)執(zhí)行后面的代碼,響應(yīng)結(jié)果的處理在之后的事件循環(huán)中解決。我們可以用一個(gè)兩人問答的場景來比喻異步與同步。 在實(shí)際開發(fā)中總會(huì)遇到許多異步的問題,最常見的場景便是接口請求之后一定要等一段時(shí)間才能得到結(jié)果,如果遇到多個(gè)接口前后依賴,那么問題就變得復(fù)雜。大家都一直...

    Ali_ 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<