2016-10-18 7 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

вы должны отредактировать свой вопрос и облегчить его чтение ;-) –

Смежные вопросы