同步函數 return 一個異步結果

前一陣子,需求中有這樣一個場景:
訪問一個頁面,而後須要封裝爲一個方法,這個方法須要返回訪問這個頁面的結果。大概把需求抽象一下就能夠變成:一個方法 fn 須要返回一個異步的結果。直觀的用代碼體現:promise

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

若是直接這樣寫,能夠看到返回的是 undefined。由於 fn 自己並無返回值。代碼中的 return 其實是異步回調的返回值,沒有什麼意義。
那我試着用 promise 來包裝一下這個異步的過程:異步

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

clipboard.png

這時候,咱們能夠看到返回的是一個 pending 的 promise 對象。而後咱們加上神奇的 await:spa

await fn()

clipboard.png

能夠看到返回就是咱們的預期了。code

而後,咱們查閱文檔看下 await 的介紹:對象

await 命令 正常狀況下,await命令後面是一個 Promise 對象。若是不是,會被轉成一個當即resolve的 Promise
對象。

這就不難理解爲何這樣寫能夠實現咱們的預期了。ip

相關文章
相關標籤/搜索