同步和異步詳解


開發過程中,很多地方需要用到同步和異步,在此總結一下

概念理解

“同步”就好比:你去外地上學(人生地不熟),突然生活費不夠了;此時你決定打電話回家,通知家里轉生活費過來,可是當你撥出電話時,對方一直處於待接聽狀態(即:打不通,聯系不上),為了拿到生活費,你就不停的oncall、等待,最終可能不能及時要到生活費,導致你今天要做的事都沒有完成,而白白花掉了時間。打不通電話,阻塞了


“異步”就是:在你打完電話發現沒人接聽時,猜想:對方可能在忙,暫時無法接聽電話,所以你發了一條短信(或者語音留言,亦或是其他的方式)通知對方后便忙其他要緊的事了;這時你就不需要持續不斷的撥打電話,還可以做其他事情;待一定時間后,對方看到你的留言便回復響應你,當然對方可能轉錢也可能不轉錢。但是整個一天下來,你還做了很多事情(非阻塞)。 或者說你找室友臨時借了一筆錢,又開始happy的上學時光了。

阻塞和非阻塞強調的是程序在等待調用結果(消息,返回值)時的狀態

同步和異步強調的是消息通信機制

 

鑒於以上,大部分情況,我們需要找家里要錢的時候(請求服務器)用異步,特別着急找同學借錢(頁面處理狀態)用同步

 

舉例,以下需求:

 

點擊處理按鈕,請求了接口,用異步;當前狀態從“已記錄”變成“已處理”,同時文本框變為disabled狀態用同步

延申

redux中,model中的reducers跟effects是負責修改狀態state的方法,其中reducers是同步方法,effects是異步方法

ES6中,async await 異步寫法,簡化異步請求,寫法類似同步

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM