async await,promise的優缺點

2022-10-10 19:39:15 字數 2015 閱讀 4677

await後面接乙個會return new promise的函式並執行它

await只能放在async函式裡

function

搖色子(),3000)

})}async

function

test()

test()

上面這段**async中使await 搖色子()先執行,等到三秒後執行完再把得到的結果賦值給左邊的n,也就是說test函式需要三秒鐘才執行完成,所以test函式是非同步的,因此前面必須寫async

把await和成功後的操作放到try裡,失敗的放在catch

async function

test()

catch

(error)

}test()

new

promise(

function

(resolve, reject)

).then(

(res) => , //

成功 (err) => //

失敗)

將promise物件的狀態從「未完成」變為「成功」(即從 pending 變為 resolved),在非同步操作成功時呼叫,並將非同步操作的結果,作為引數傳遞出去;

將promise物件的狀態從「未完成」變為「失敗」(即從 pending 變為 rejected),在非同步操作失敗時呼叫,並將非同步操作報出的錯誤,作為引數傳遞出去。

pending[待定]初始狀態

fulfilled[實現]操作成功

rejected[被否決]操作失敗

當promise狀態發生改變,就會觸發then()裡的響應函式處理後續步驟;

promise狀態一經改變,不會再變。

promise物件的狀態改變,只有兩種可能:

從pending變為fulfilled

從pending變為rejected。

這兩種情況只要發生,狀態就凝固了,不會再變了。

new promise(resolve =>, 2000)

}).then(val =>, 2000)

})}).then(val =>)

promise完成後.then()

let pro = new promise(resolve =>, 2000)

}) settimeout(() =>)

}, 2000)

捕獲錯誤:

promise物件內部其實自帶了try catch,當同步**發生執行時錯誤時,會自動將錯誤物件作為值reject,這樣就會觸發catch註冊的**,如下:

let p = new promise((resolve, reject) =>);

p.catch(err =>);

(1)async/awsit他做到了真正的序列的同步寫法,**閱讀相對容易

(2)對於條件語句和其他流程語句比較友好,可以直接寫到判斷條件裡面

(3)async/await處理複雜流程時,在**清晰度方面具有優勢

(4)無法處理promise返回reject物件,要借助try...catch

(5)async/await中await只能序列,做不到並行,

(6)全域性捕獲錯誤必須用window.onerror,而這種會捕獲稀奇古怪的錯誤造成系統浪費,不像promise可以專用window.addeventlistener('unhandledrejection',function)

(7)try...catch...內部的變數無法傳遞給下乙個try...catch...

(8)無法簡單實現promise的各種原生方法,比如->race()

(1)需要使用到promise各種便捷的方法的時候一定使用promise

(2)並行的請求最好用promise

(3)不需要並行的場合,但是要傳遞引數時,最好用promise

(4)其他ajax場合,看喜好選擇try...catch...還是.catch(),

OpenSessionInView的優缺點

概念 在hibernate中使用load方法時,並未把資料真正獲取時就關閉了session,當我們真正想獲取資料時會迫使load載入資料,而此時 session已關閉,所以就會出現異常。比較典型的是在mvc模式中,我們在m層呼叫持久層獲取資料時 持久層用的是load方法載入資料 當這一呼叫結束時,s...

AsyncTask 和Handler 的優缺點比較

asynctask 實現的原理和優缺點 優點 快捷 方便 缺點 當執行多個後台任務,和並需要ui 變更起來就比較複雜 handler 實現的原理和優缺點 優點 簡單 清晰 缺點 當執行單個後台任務,顯得 過多,結構複雜 相對性 asynctask 介紹 android 的asynctask 比han...

Fragment與Activity的優缺點比較

專案中對activity和fragment使用都很多,它們都能用來寫頁面,那麼什麼時候用activity,什麼時候用fragment?關於 android,用多個 activity,還是單 activity 配合 fragment?中提到 單activity多fragment實現,已知的坑有,act...