Nodejs 坐标返回地址的回调函数如何写?

Nodejs 坐标返回地址的回调函数如何写?

function address(lat,lng){
request(‘https://maps.googleapis.com/maps/api/geocode/json?latlng=’+ lat +’,’+ lng +’&sensor=false’, function (error, response, data) {
if (!error && response.statusCode == 200) {

    //var dd = JSON.stringify(data);
    //console.log(data);
    var result = JSON.parse(data);
    var dd = JSON.stringify(result);
    //console.log(result);
    var address = result.results[0].formatted_address;
    console.log(address)
    return address;

} })} console.log(address(22.333,113.5555));


6 回复

当然可以。下面是一个关于如何使用Node.js编写一个通过坐标获取地址的回调函数的示例代码。我们将使用Google Maps Geocoding API来实现这一功能。

首先,我们需要安装request模块,这是一个用于发起HTTP请求的简单易用的库。你可以通过npm来安装它:

npm install request

接下来,我们编写代码来实现这个功能。注意,你需要替换YOUR_API_KEY为你自己的Google Maps API密钥。

const request = require('request');

// 定义一个函数,接收经纬度作为参数,并通过回调函数返回结果
function getAddress(lat, lng, callback) {
    const url = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&sensor=false&key=YOUR_API_KEY`;

    request(url, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            const result = JSON.parse(body);
            const address = result.results[0].formatted_address;
            callback(null, address); // 成功时,调用回调函数并传入地址
        } else {
            callback(error || new Error('Geocoding failed'), null); // 失败时,调用回调函数并传入错误信息
        }
    });
}

// 使用示例
getAddress(22.333, 113.5555, function(err, address) {
    if (err) {
        console.error('Error:', err);
    } else {
        console.log('Address:', address);
    }
});

在这个例子中,我们定义了一个名为getAddress的函数,该函数接受三个参数:纬度(lat)、经度(lng)以及一个回调函数(callback)。当从API获取到数据后,我们解析JSON响应并将地址传递给回调函数。如果请求失败或解析过程中出现任何问题,我们也会将相应的错误信息传递给回调函数。

这样,你就可以在外部调用getAddress函数,并根据需要处理成功或失败的情况了。


要么深层嵌套要么讲结果处理函数当作参数传递给address(其实就是深层嵌套),要么用async控制流程

好的。谢谢。

就一个异步操作,没必要用 async

function address(lat, lng, callback) {
    ...
    callback && callback(address);
}

这个就是传递处理函数给address了啊,有什么办法能让request的结果同步返回么,用async.series搞不定,只能把处理函数放在async里面

在你的代码中,address 函数尝试通过 Google Geocoding API 将坐标转换为地址。但是,由于 request 是一个异步操作,直接使用 return 关键字无法正确地将结果返回给调用者。你需要使用回调函数来处理异步结果。

以下是修改后的代码示例:

const request = require('request');

function address(lat, lng, callback) {
    request('https://maps.googleapis.com/maps/api/geocode/json?latlng=' + lat + ',' + lng + '&sensor=false', function (error, response, data) {
        if (!error && response.statusCode == 200) {
            const result = JSON.parse(data);
            const address = result.results[0].formatted_address;
            callback(null, address);  // 使用回调函数传递结果
        } else {
            callback(error || new Error('Failed to fetch address'), null);
        }
    });
}

// 调用示例
address(22.333, 113.5555, function(err, address) {
    if (err) {
        console.error(err);
    } else {
        console.log(address);
    }
});

在这个例子中,我们定义了一个 address 函数,它接受两个坐标参数以及一个回调函数。当请求成功时,我们将解析的结果作为第二个参数传递给回调函数。如果发生错误,则将错误对象作为第一个参数传递给回调函数。

这种方式可以更好地处理异步操作,并确保你的程序能够正确地处理 API 请求的结果。

回到顶部