2017-01-02 106 views
-1

所以我對Node開發很陌生。我的第一個個人項目需要創建一個頁面的html內容的本地txt文件進行進一步操作。我不知道在請求調用之前爲什麼程序中的其他所有內容都被執行了。例如在下面的代碼片段中,「Two」總是會在「One」之前出現。我知道這可能是簡單的我想念但我希望從中學到一些東西。Node.js請求 - 執行順序

var request = require('request'); 
 
var fs = require('fs'); 
 

 

 
request('https://www.google.com', function (response, body) { 
 
    \t console.log("One") 
 
    fs.writeFile("ToParse.txt", body) 
 
    
 
}); 
 

 
console.log("Two")

回答

1

「兩個」 永遠之前的 「一」

因爲Node.js的是異步

它的意思比以前的功能贏得了」來不停止執行過程,而是調用函數而不管前面的函數是否已經停止執行

如果你想有一個序列使用CallbacksPromises

1

這是因爲的NodeJS/JavaScript的,因爲它是單線程的異步性質,請求模塊正在執行異步操作和aftering操作的完成或失敗,它會調用我們稱之爲回調函數的最後一個函數。

請求將需要時間來執行它的操作,同時做一個GET方法www.google.com

節點將會把該操作在隊列中,並執行其他操作,你的情況console.log它安慰結果並在稍後從隊列中執行排隊操作。

參觀此 https://developer.mozilla.org/en/docs/Web/JavaScript/EventLoop

回調函數的第一個參數應始終錯誤,如果沒有發生錯誤,否則它將爲空。

request('http://www.google.com', function (error, response, body) { 
    // your code 
}) 
0

你的第二個參數的函數傳遞request功能是一個回調。它將在請求處理後被調用。 Node.js的本質是,不用等待(阻塞)就可以連續執行代碼,以便調用回調。當請求完成時(失敗/成功),你的回調將被調用。這就是爲什麼在「One」之前打印「Two」