這節我們來了解一下nodejs實現非阻塞操作的方法。
我們先來修改一下 start的處理程序:
這段代碼,創建了一個新的變量content(初始值為“empty”),執行“ls -lah”命令,將結果賦值給content,最后將content返回。
我們引入了一個新的Node.js模塊,child_process,之所以用它,是為了實現一個既簡單又實用的非阻塞操作:exec()。
那么exec()做了什么呢?
它從Node.js來執行一個shell命令。在上面的例子里,我們用它來獲取當前目錄下所有的文件(“ls -lah”),然后,當/startURL請求的時候將文件信息輸出到瀏覽器中。
我們啟動服務器,訪問“http://localhost:8888/start”我們會發現頁面輸出的內容是 empty。
exec()發揮作用了,有了它,我們可以執行非常耗時的shell操作而無需迫使我們的應用停下來等待該操作。
雖然如此,但是頁面輸出的內容似乎不是我們想要的結果。
我們來分析一下原因:
我們的代碼是同步執行的,這就意味著在調用exec()之后,Node.js會立即執行 return content ;
在這個時候,content仍然是“empty”,因為傳遞給exec()的回調函數還未執行到――因為exec()的操作是異步的。
下一節我們將介紹如何解決這個問題。
新聞熱點
疑難解答