前端多執行緒處理——async/await
async 從字面上看就是“非同步”,它放在函式定義之前,是使該函式在呼叫時開一個子執行緒,以不影響主執行緒的執行。
而 await 經常和 async 組合使用,在 async 定義的函式中來等待需要時間執行的程式碼(如ajax請求、Promise物件)的執行結果,以做後續的處理。
如下面的返回Promise物件的函式:
function print(delay, message) { return new Promise(function (resolve, reject) { // 返回Promise物件 setTimeout(function () { // 延遲執行函式 console.log(message); resolve(); }, delay); }); }
如果需要執行透過,就需要經過then、catch、finally函式來執行響應的程式碼:
print(1000, "First").then(function () { // 1秒之後輸出“First” return print(2000, "Second"); // 2秒之後輸出“Second”}).then(function () { return print(1000, "Third"); // 1秒之後輸出“Third”}).then(function (){ print(2000, "Fourth"); // 2秒之後輸出“Fourth”});
而使用 async/await 可以實現同樣的效果,使用非同步操作就像同步操作一樣簡單:
async function asyncFunc() { await print(1000, "First"); await print(2000, "Second"); await print(1000, "Third"); await print(2000, "Fourth"); }asyncFunc();
而對於 Promise 中的異常處理,使用 try-catch 來實現:
async function asyncFunc() { try { await print(1000, "First"); //1秒後輸出"First" }); } catch (err) { console.log(err); //輸出異常錯誤 } try { await print(2000, "Second"); //2秒後輸出"Second" }); } catch (err) { console.log(err); //輸出異常錯誤 } try { await print(1000, "Third"); //1秒後輸出"Third" }); } catch (err) { console.log(err); //輸出異常錯誤 } try { await print(2000, "Fourth"); //2秒後輸出"Fourd" }); } catch (err) { console.log(err); //輸出異常錯誤 } }asyncFunc();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70034822/viewspace-2991657/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- @Async使用ThreadPoolTaskExecutor 多執行緒thread執行緒
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 多工處理方式之二:多執行緒執行緒
- 多執行緒合集(二)---非同步的那些事,async和await原理拋析執行緒非同步AI
- Spring多執行緒事務處理Spring執行緒
- threading 多執行緒控制和處理thread執行緒
- Python自由之路(三)多執行緒處理Python執行緒
- 多執行緒理論執行緒
- IO處理執行緒執行緒
- async/await 如何優美的處理異常?AI
- java中多執行緒併發的處理方式Java執行緒
- Java 多執行緒處理任務的封裝Java執行緒封裝
- 多執行緒07:async、future、packaged_task、promise執行緒PackagePromise
- Java多執行緒並行處理任務的實現Java執行緒並行
- async/await 優雅的錯誤處理方法AI
- async await、Promise、setTimeout執行順序AIPromise
- Python模組學習:thread 多執行緒處理Pythonthread執行緒
- java 基礎之圖片的多執行緒處理和大檔案的多執行緒拷貝Java執行緒
- java多執行緒:執行緒體往外丟擲異常的處理機制實踐Java執行緒
- 如何處理執行緒死鎖執行緒
- mysql 5.7 執行緒阻塞處理MySql執行緒
- 多執行緒和多執行緒同步執行緒
- 令人費解的 async/await 執行順序AI
- 【譯】Async/Await(一)——多工AI
- JAVA多執行緒下高併發的處理經驗Java執行緒
- 多執行緒應用–Http請求阻塞回撥處理執行緒HTTP
- 多執行緒應用--Http請求阻塞回撥處理執行緒HTTP
- Android 中 EventBus 的使用(3):多執行緒事件處理Android執行緒事件
- boost中asio網路庫多執行緒併發處理實現,以及asio在多執行緒模型中執行緒的排程情況和執行緒安全。執行緒模型
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- Java多執行緒——執行緒Java執行緒
- 執行緒與多執行緒執行緒
- VC多執行緒 C++ 多執行緒執行緒C++
- Java多執行緒之synchronized理論Java執行緒synchronized
- 執行緒安全處理之Threadlocal執行緒thread
- 【轉】JAVA處理執行緒超時Java執行緒
- 多執行緒-執行緒控制之休眠執行緒執行緒