前面我說過,node 有些地方的寫法設計,看起來很怪、很醜
在瀏覽器 js 環境,我們的確不知道用戶何時會點擊按鈕、不知道 AJAX 回應何時會拿到
不能讓網頁整個停下來卡住、等待上述事件發生,所以必須用「非同步程式設計」處理
可是檔案系統模組,絕大多數情況下,你就是要現在就讀取好檔案、讀取完才讓程式接著繼續跑,才有意義
實在沒必要用「非同步程式設計」處理!
取得用戶輸入就更不用說了,程式就是該停在這裡、等用戶輸入完再接著繼續執行,才有意義
何必用「非同步程式設計」處理!
其他程式語言,大多都是「同步程式設計」,例如用 Python 寫同樣程式時
就是一行一行寫下來即可,不用像這邊這樣把函式當參數傳進去
簡單講,javascript 的非同步設計,在網頁畫面上運作時,有其優勢與必要
但是在用來寫腳本時,顯得多餘而不必要
來學習怎麼改寫吧,打開 read-my-name.js
,改寫成以下內容
var fs = require('fs');
var data = fs.readFileSync('my-name.txt');
console.log("您好," + data);
process.exit(0);
執行看看!
node read-my-name.js
跑起來一模一樣,但是不是好讀多了?
注意 fs.readFileSync
後面的 sync,那就是同步的意思
接著來改寫第二個程式吧,打開 write-my-name.js
,改寫成以下內容
var fs = require('fs');
const readlineSync = require('readline-sync');
var answer = readlineSync.question('請問您的大名?\n');
fs.writeFileSync('my-name.txt', answer);
console.log('儲存成功。');
process.exit(0);
是不是好讀多了?
新函式名稱,就是後面加上 sync 而已,node 官方知道大家的抱怨,所以有提供這些同步函式
但是,這段 code 不能直接執行,因為 readline-sync
不是官方內建模組,是社群開發的,需要透過 npm 安裝
怎麼辦?
NPM 全稱為 Node Package Manager,也就是 Node 套件管理工具
關於 npm 的安裝,網路上有非常多教學,請根據你的作業系統,自己找一套安裝方法
安裝好之後,你就可以使用「終端機」運行 npm 指令
請在終端機輸入 npm install readline-sync
即可安裝 readline-sync
套件
會多出兩個檔案 package-lock.json
package.json
用來記錄目前專案用到的 npm 套件,你可以打開這兩個檔案看一看
還會多出一個資料夾 node_modules
,套件本身會下載到這個地方,你可以打開資料夾逛一逛
接著執行看看!
node write-my-name.js
跑起來一模一樣,但是好讀多了!
接續前一課的作業,現在來嘗試「同步」的語法
請把「非同步」的語法改寫,通通改用「同步」的語法
改完之後,程式碼中,應該就不會出現 callback function 了
也就是不會出現「把一段函式定義當作參數傳進另一個函式」這種情況
完成以上任務,你就完成這次的課程目標了!
歡迎將作業成果,在下方留言,跟大家分享,讓大家給你一些回饋!
可以將每課學到的觀念、關鍵字,丟到網路上去搜尋、研究一下!
發問請在「討論專區」為主,或者分享學習筆記、寫學習心得!
貼文都會出現在個人檔案頁面,成為學習歷程、部落格紀錄!
未來面試時,分享給面試官看,會讓人知道你的積極程度!
作業繳交
github