前一陣子,需求中有這樣一個場景:
訪問一個頁面,而後須要封裝爲一個方法,這個方法須要返回訪問這個頁面的結果。大概把需求抽象一下就能夠變成:一個方法 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()
這時候,咱們能夠看到返回的是一個 pending 的 promise 對象。而後咱們加上神奇的 await:spa
await fn()
能夠看到返回就是咱們的預期了。code
而後,咱們查閱文檔看下 await 的介紹:對象
await 命令 正常狀況下,await命令後面是一個 Promise 對象。若是不是,會被轉成一個當即resolve的 Promise
對象。
這就不難理解爲何這樣寫能夠實現咱們的預期了。ip