Обратный вызов Node.js уже вызван. Но других обратных вызовов нет

Я весь день ищу по форуму, но не могу решить свою проблему. Я использую NodeJS и async.waterfall для выполнения некоторых запросов API. У меня работает та же структура, но не там;

    async.waterfall([
       function (callback) {
           callback(null, latitude, longitude, callback);
       },
       getGeoNames,   
   ],
   function (err, result) {
      console.log("ok");
   })

а вот функция getGeoNames с ошибкой

function getGeoNames(latitude, longitude, callback) {
    var countryKey = 'country';
    var stateKey = 'administrative_area_level_1';

    var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng="+latitude+","+longitude;


    request({
        url: url,
        json: true
    }, function (error, response, body) {

            var adresses = body.results[0].address_components;
            var geo = {};
            for (var i = 0, len = adresses.length; i < len; i++) {
                var adress = adresses[i];
                //console.log(adress);
                if ( adress.types[0] == countryKey ) {
                    geo.country = adress.long_name;
                    if (geo.state !== undefined) break;
                }
                else if ( adress.types[0] == stateKey ) {
                    geo.state = adress.long_name;
                    if (geo.country !== undefined) break;
                }
            };
            return callback(null, geo); // ERROR HERE <-----------------
    })
}

Может ли функция запрашивать функцию callback (), чтобы она выполнялась раньше? Пробовал без "возврата", но все равно.

        if (fn === null) throw new Error("Callback was already called.");
                         ^

Ошибка: обратный вызов уже был вызван. в c: \ Users \ Serega \ node_modules \ async \ dist \ async.js: 803: 36 в Request._callback (c: \ Users \ Serega \ WebstormProjects \ untitled1 \ server.js: 174: 20) в Request.self. обратный вызов (c: \ Users \ Serega \ node_modules \ request \ request.js: 200: 22) в emitTwo (events.js: 87: 13) в Request.emit (events.js: 172: 7) в Request. (c: \ Users \ Serega \ node_modules \ request \ request.js: 1067: 10) в emitOne (events.js: 82: 20) в Request.emit (events.js: 169: 7) в IncomingMessage. (c: \ Users \ Serega \ node_modules \ request \ request.js: 988: 12) в emitNone (events.js: 72: 20)

Процесс завершен с кодом выхода 1

PS: другие функции водопада работают по запросу для меня.

Спасибо за помощь!


person Sergey    schedule 25.04.2016    source источник


Ответы (1)


Ошибка здесь.

callback(null, latitude, longitude, callback);

Вы не должны передавать обратный вызов в качестве аргумента.

person Роман Парадеев    schedule 25.04.2016