0
votes

I'm searching forum all the day, but I can't solve my problem. Im using NodeJS and async.waterfall to make some API requests. Same structure works for me, but not there;

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

and here are function getGeoNames with error

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 <-----------------
    })
}

Can request function run callback() function , so it was runned before? I tried without "return", but it's the same.

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

Error: Callback was already called. at c:\Users\Serega\node_modules\async\dist\async.js:803:36 at Request._callback (c:\Users\Serega\WebstormProjects\untitled1\server.js:174:20) at Request.self.callback (c:\Users\Serega\node_modules\request\request.js:200:22) at emitTwo (events.js:87:13) at Request.emit (events.js:172:7) at Request. (c:\Users\Serega\node_modules\request\request.js:1067:10) at emitOne (events.js:82:20) at Request.emit (events.js:169:7) at IncomingMessage. (c:\Users\Serega\node_modules\request\request.js:988:12) at emitNone (events.js:72:20)

Process finished with exit code 1

PS: other waterfall functions works with request for me.

Thanks for help!

1

1 Answers

0
votes

The error is here.

callback(null, latitude, longitude, callback);

You should not pass a callback as an argument.