? ? ? ? 什么是服務器?我們知道客戶端通過訪問服務器,然后服務器去操作數據庫把我們想要的數據拿過來給客戶端。比如服務器就是餐廳的服務員,數據庫就是廚房,客戶端就是我們的顧客。首先我們點菜,服務器告訴廚師做飯,然后把飯給我們。這樣我們就大致知道了服務器是做什么的。就是一個線程的容器為我們提供服務。
????????
? ? ? ? Node.js是運行在服務器的js用來編寫服務器。
????????
? ? ? ? 這里是java編寫服務器和nodejs的不同,nodejs的特點1.單線程2.異步3.非阻塞4.統一API?.
????????
? ? ? ?I/O指的是input ouput 輸入輸出不會被阻塞,就是并行服務員一直接新訂單。統一API是前后端都用js寫。都遵循ECMAScript語法(流程控制語句 函數對象運算符一致)也保留了部分console.log調試語句。
????????
? ? ? 1.Nvm?的安裝以及命令
? ? ? ? ? ??nvm是一個管理Node.js多版本的工具可以輕松切換不同項目所需的Node.js版本避免全局沖突。
? ? ? ? 這里一些簡單的命令
????????
? 2.怎么用node?
? ? ? ? ? ? ? 1.直接在終端輸入node
????????????????
? ? ? ? ? ? ? ? 就可以直接寫js代碼了?
? ? ? ? ? 2.在根目錄下用node 文件名
??????????????????
? ? ? ? 或者用快捷鍵 fn+f5(mac) 這樣就可以調試我們寫的node.js代碼了。
3.異步編程
? ? ? ? 首先理解同步和異步直接先插入一個概念,進程和線程。
? ? ? ? 進程:程序運行的環境(工廠的廠房計算機內存給代碼留的內存空間)
? ? ? ? 線程(工人)線程是實際進行運算的東西在進程里面運算。
同步和異步
? ? ? ? 通常情況下我們的代碼是一行行執行如果前面代碼不執行后面的代碼也不會執行。如果同步的代碼出現阻塞的情況,一行代碼慢會影響整個程序的運行。
? ? ? ? 為了解決同步的問題。node.js通過異步方式來解決。執行代碼速度慢的代碼不會影響其他代碼。
????????
?????????
? ? ? ? 比如這種代碼,我們后面的輸出都需要等sum函數執行完三秒后才可以運行。我們如果用異步去解決的話。
????????
?????????
? ? ? ? 我們發現一個問題異步好像就拿不到result返回值了?,因為我們同步輸出了result這時候沒有拿到result這就很難受了,我們怎么才能拿到值呢?我們可以用回調函數來解決。
? ? ? ? 我們這里用回調函數然后作為參數來獲取我們a+b的值然后輸出,如果我們希望加好幾次呢?就需要去在回調函數里面拿到result之后再去拿當前的result作為參數再次調用sum函數。
????????
? ? ? ? 就會出現這樣代碼的可讀性差,可調試性差也是我們說的回調地獄。
現在我們知道我們用異步解決了所謂的同步代碼會因為一行代碼影響程序執行,但是異步的話我們就無法通過return設置返回值。雖然不會阻塞代碼,但是需要回調函數的參數來返回結果。形成回調地獄。
? ? ? ? 為了解決這個問題,Promise橫空出世 Promise用來存儲異步調用的數據?