hello,小伙伴,歡迎來到今天的課堂筆記,無論此時的你是在座位上神游太虛還是在寫字樓外放飛自我,希望進到這里可以面帶微笑,看完今天的課程內容。(看就行了,微不微笑都無所謂)
本節課的主題是Node.js的promise語法
首先,在此對我們的技術指導趙老師表示熱烈且由衷的感謝,此處應該有掌聲,熱烈的掌聲
然后我們開始說promise這個語法什么作用呢,那得從盤古開天辟地說起,咳咳,跑偏了,拉回來,是從同步和異步的概念說起
何為同步,何為異步呢,我們說個段子,啊不,舉個栗子
東邊的山上有兩只猴,老猴子和小猴子,兩只猴子平時愛好吃桃子打農藥
編程中的同步:
老猴子對小猴子說,老子想玩農藥了。但是老子低血糖,必須先吃個桃子才能玩,要不會坑隊友。你去給我摘個桃,不吃完桃子我不打,然后小猴子去摘桃子去了,老猴子就坐在一直等,桃子不到,就不做其他事情,這個過程就是同步。
異步:?
經過每天吃桃,老猴子低血糖好了,不吃桃子也可以玩農藥,它對小猴子說,你去給我摘個桃,然后小猴子去摘桃子去了,老侯就坐在哪里開始玩農藥,一邊玩一直等著,玩完一局農藥可能還會吃雞。在等的過程中老猴子會做其他事情,這個就是異步出來。
說到這里,有點概念了嗎,異步就是在同一時間可以做多件事情,正如我們的程序里面,一段代碼執行的同時,另外一段可能也在執行,Node.js語言就具備這個異步的特性,但是這個特性有時候會帶來一些困擾,比如某段程序在執行過程耗時較長,那么整體的程序輸出結果可能會導致順序打亂
比如上面這個例子中,我們假設小猴子摘桃動作5s,老猴子吃桃需要3s,?根據我們使用其它編程語言的習慣 在老猴有低血糖又癡迷農藥游戲的那段時光。我們以往的經驗: 來這樣編程
但是你會發現,這段程序的輸出結果是這樣的,桃子還沒吃,就開始打農藥,結果肯定是老猴子秒變豬隊友,各種被噴,這個結果就是Node.js的異步特性導致的
在老猴子低血糖的情況下,又要滿足它想打農藥的需求,怎么辦呢?這就要引出回調函數的概念了,回調又是啥?你可以這樣理解,在方法里面再寫入一個方法,回調這個函數
看一下打印結果,就是按照我們想要的順序排列的,6不6
但是,按照這種方法去寫的話,假設老猴子在此期間有其他的一件或者多件事情要做,那么都這樣寫進一個方法里,會灰常不方便而且也很混亂,那么我們可以這樣寫,callback回調,這樣回調多個方法的時候不會把自己繞亂,是不是更6了一點
雖然更6了一點,但是回調函數也有缺點,就是不利于代碼的閱讀和維護,各個部分之間高度耦合(Coupling),流程會很混亂,而且每個任務只能指定一個回調函數,接下來終于要引出我們開場說的promsise了,原諒我兜了這么大一圈
我們先把四個方法定義好,這里,promise后面的resolve和reject是兩個函數,里面的方法如果成功傳值resolve,失敗就傳reject返回error,這里面對于reject的情況我們就不多舉例了,主要看promise的作用,我們看到四個方法里都是返回resolve的值打印相應的信息,這個return,新來的吧,面生啊,它的意義在于,取到了要打印的結果,返回給前面的方法,就像是接力賽跑,第一段里,確定了拿到要打印的信息“老猴低血糖,要先補充個桃子才能農藥”,return就是告訴willGame,接力棒來了,繼續下面的操作,遞給getPeach方法接上吧,以此類推。
不過到這程序可還沒完啊,看到這里不要撒歡跑路了,接下來就是通過then來控制,上面的四種方法各自拿到要打印的信息了,接下來的then,讓它們按順序打印出各自的結果,這里結果圖不再發了,肯定跟之前一樣的,I promise
問題又來了
我們是誰? ? ? ? ? ? ? ? ? 測試!
我們要干嘛? ? ? ? ? ? ? 寫自動化測試代碼!
重要的是什么? ? ? ? ? ?會寫代碼!
比會寫代碼更重要的是什么? ? 會寫優雅的代碼!
上面一大坨解決了我們會寫代碼的痛點,但是如果寫的東西多了,它還是不夠優雅,如何優雅的寫代碼呢?敬請期待下一節課:終極大招,async/await
騰訊課堂
https://ke.qq.com/course/281565#tuin=173f40be,周一至周五晚上8:00,準時等你
測試工具CukeTest下載地址http://www.cuketest.com/