2016-10-18 127 views
0

我創建一個簡短的例子和我有一個dubt:回調函數 - 的NodeJS

var request = require("request"); 
var url = "http://api.openweathermap.org/data/2.5/weather?q=turin&APPID=xxxxxxxxxxxxxxxxxxxxxx"; 
module.exports = function (callback) { 

    request(
    { 
     url: url, 
     json: true 
    }, function (error, response, body) { 
     if (error) { 
      callback("Unable to fetch weather"); // callback function 
     } else { 
      callback("It is " + body.main.temp + " in " + body.name); 
     } 
    }); 

    console.log("After request"); 
}; 

而從外部文件,我需要該模塊:

var weather = require("./weather.js"); 

weather(function (currentWeather) { 
    console.log(currentWeather); 
}); 

在這種情況下,我稱之爲weather模塊,我得到一個callback函數(它是天氣模塊的一個參數),用於打印命令行天氣在都靈。但它是如何工作的?

+3

目前還不清楚你在問什麼。 'weather.js'的輸出是一個函數。您可以使用回調函數參數調用該函數。 –

+0

「但是怎麼可能?」我認爲他真正的問題是「它是如何工作的?」。 –

回答

1

我所說的天氣模塊和我在都靈得到一個回調函數(它是天氣模塊的 參數)打印到命令行的天氣 。但怎麼可能?在Javascript

函數是一個first class object 意味着你可以將功能存儲到一個變量,並傳遞到另一個函數。這種模式在Node.js和Javasript中很常見,這就是所謂的Continuation passing style(CPS)

希望它有幫助。

+0

清除!非常感謝你:) – DevWeb

+0

你應該編輯你的問題,並使它更容易閱讀;-) –