国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

輕松創建nodejs服務器(8):非阻塞是如何實現的

2019-11-20 13:40:12
字體:
來源:轉載
供稿:網友

這節我們來了解一下nodejs實現非阻塞操作的方法。

我們先來修改一下 start的處理程序:

復制代碼 代碼如下:

var exec = require("child_process").exec;
function start() {
  console.log("Request handler 'start' was called.");
  var content = "empty";
  exec("ls -lah", function (error, stdout, stderr) {
 content = stdout;
  });
  return content;
}
 
function upload() {
  console.log("Request handler 'upload' was called.");
  return "Hello Upload";
}
 
exports.start = start;
exports.upload = upload;

這段代碼,創建了一個新的變量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()的操作是異步的。

下一節我們將介紹如何解決這個問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邛崃市| 许昌市| 焉耆| 东光县| 日喀则市| 江孜县| 什邡市| 玉龙| 四平市| 柞水县| 广昌县| 黔南| 碌曲县| 太原市| 灯塔市| 平顶山市| 镇巴县| 白玉县| 郸城县| 长宁区| 皋兰县| 宿迁市| 三江| 南昌市| 温宿县| 宜春市| 康马县| 子洲县| 太白县| 锦州市| 余干县| 柘荣县| 毕节市| 堆龙德庆县| 新宾| 泰州市| 大新县| 玉田县| 文成县| 望谟县| 高唐县|