前端多執行緒處理——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執行緒
- Spring多執行緒事務處理Spring執行緒
- 多工處理方式之二:多執行緒執行緒
- 多執行緒合集(二)---非同步的那些事,async和await原理拋析執行緒非同步AI
- async/await 如何優美的處理異常?AI
- 多執行緒理論執行緒
- async await、Promise、setTimeout執行順序AIPromise
- async/await 優雅的錯誤處理方法AI
- Java多執行緒並行處理任務的實現Java執行緒並行
- 多執行緒07:async、future、packaged_task、promise執行緒PackagePromise
- mysql 5.7 執行緒阻塞處理MySql執行緒
- 執行緒安全處理之Threadlocal執行緒thread
- 如何處理執行緒死鎖執行緒
- 令人費解的 async/await 執行順序AI
- 【譯】Async/Await(一)——多工AI
- 多執行緒應用–Http請求阻塞回撥處理執行緒HTTP
- JAVA多執行緒下高併發的處理經驗Java執行緒
- 3種方式實現python多執行緒併發處理Python執行緒
- 多執行緒應用--Http請求阻塞回撥處理執行緒HTTP
- 多執行緒和多執行緒同步執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- Netty中的執行緒處理EventLoopNetty執行緒OOP
- Spring如何處理執行緒併發Spring執行緒
- 如何避免讓執行緒摸魚,請用非同步技術 async await 拿捏他~執行緒非同步AI
- Js中async/await的執行順序詳解JSAI
- promise、async、await非同步原理與執行順序PromiseAI非同步
- Java多執行緒之synchronized理論Java執行緒synchronized
- 畫江湖之 PHP 多執行緒開發 【利用多執行緒 序列任務變並行處理 從而減少序列執行時間】PHP執行緒並行
- 用 UI 多執行緒處理 WPF 大量渲染的解決方案UI執行緒
- 你是如何更好地處理Async/Await的異常的?AI
- 初學者看過來:Python中多執行緒和多處理的指南Python執行緒
- 微核心、多執行緒、SMP對稱多處理、分散式作業系統執行緒分散式作業系統
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒系列(1),多執行緒基礎執行緒