NodeJS回调不是函数

时间:2016-10-20 23:04:04

标签: javascript node.js

我是Node JS的新手,所以我从一些简单的东西开始。天气应用程序。但我有一个问题,我现在正在寻找几个小时,我找不到解决方案。那就是我在这里问的原因。

我的回调出错了。 这是我的代码:

var weather = (lat, long, callback) => {

request({
    url: `https://api.darksky.net/forecast/79edcc21428e0d3076f214db1935daeb/${lat},${long}`,
    json: true

}, (error, response, body) => {

    var fahrenheit = body.currently.temperature;
    var celsius = Math.round(((fahrenheit-32)/1.8) * 10) /10;

    console.log(fahrenheit);
    console.log(celsius);

    callback(celsius);

}); 
};

我在这里打电话给回电:

// stuff to get latitude and longtitude
    weather(lat, long);
    var test = celsius;

该变量可能是错误的,但如果没有它,我也会收到错误。

我希望有人可以帮助我,因为我只是不知道如何解决它:(

对于那些想要查看完整代码的人: (我是荷兰人,所以这些信息也在荷兰语中,但没什么特别的。)

    const request = require('request');

var weather = (lat, long, callback) => {

    request({
        url: `https://api.darksky.net/forecast/79edcc21428e0d3076f214db1935daeb/${lat},${long}`,
        json: true

    }, (error, response, body) => {

        var fahrenheit = body.currently.temperature;
        var celsius = Math.round(((fahrenheit-32)/1.8) * 10) /10;

        console.log(fahrenheit);
        console.log(celsius);

        callback(celsius);

    });

};

var address = (address, callback1, celsius) => {

    var address = encodeURIComponent(address);

    request({
        url: `https://maps.googleapis.com/maps/api/geocode/json?address=${address}`,
        json: true
    }, (error, response, body) => {
        if (error) {

            callback1('Niet mogelijk om de Google servers te contacteren.');

        } else if(body.status === 'ZERO_RESULTS') {

            callback1('Niet mogelijk om dat address te vinden.');

        } else if(body.status === 'OK') {

            var lat = body.results[0].geometry.viewport.northeast.lat;
            var long = body.results[0].geometry.viewport.northeast.lng;

            weather(lat, long);
            var test2 = celsius;

             callback1(undefined, {
                Test: `test: ${test2}`,
                Address: body.results[0].formatted_address,
            //     Lat: body.results[0].geometry.viewport.northeast.lat,
            //     Long: body.results[0].geometry.viewport.northeast.lng
             });

        } else {
            callback1('Er is iets mis gegaan.');
        }
    });

};

module.exports.address = address;

编辑:奇怪的是,它在天气变量中不起作用,而它在地址变量中起作用......:'(

2 个答案:

答案 0 :(得分:0)

var weather = (lat, long, callback) => {

使用三个参数声明

weather(lat, long);

两个人打电话。

您是否添加了如下调试行:

var weather = (lat, long, callback) => {
  console.log('callback = ', callback);

您可能已经看到callback确实是未定义的问题。

答案 1 :(得分:0)

你的电话必须使用一个函数作为回调,事实上它并没有。这样称呼:

weather (lat, long, function (celsius) {
    alert (celsius);
});

请注意,现在这是异步的。有关详细信息,请查看What is the difference between synchronous and asynchronous programming (in node.js)