【问题标题】:Node route function does nothing节点路由功能什么都不做
【发布时间】:2015-07-24 08:34:43
【问题描述】:

我正在编写一个简单的应用程序,它从 Google Maps Geocoding API 获取一些地理编码数据。我正在尝试使用 async.each()(来自this package)函数中的节点地理编码器(this package)获取地址数组(以字符串形式)的这些数据:

async.each(entries, function(entry, callback) {

    geocoder.geocode(entry.address, function(err, res) {
        resultCheck.push(res);
        var point = {
            address: entry.address,
            coordinates: {
                    latitude: res.latitude,
                    longtitude: res.longtitude
            }
        };
        pointSet.points.push(point);
        callback();
    }, function(err) {
        if(err) { errorArray.push(err); }
    });
});

测试表明 async 函数处理数组的每个成员,但 geocode 函数什么也不做(resultCheck 和 errorArray 在请求响应中广播)。

作为一个几乎完全是 JavaScript 菜鸟,我还想问一下 - 这种方法是否接近正确?

欢迎任何见解,提前致谢。

编辑:似乎异步函数没有等待 GM API 的响应,必须着手处理,如果我克服了这个问题,就会发布。

【问题讨论】:

    标签: javascript node.js google-maps asynchronous


    【解决方案1】:

    我可以在您的代码中看到一些问题,假设如下

    1. 你使用google maps api v3
    2. 并使用此async 模块

    代码应该是这样的,注意geocodeasync.each的签名

    async.each(entries, function (entry, callback) {
        geocoder.geocode(entry.address, function (result, status) {
            resultCheck.push(result);
            var point = {
                address: entry.address,
                coordinates: {
                    latitude: result.latitude,
                    longtitude: result.longtitude
                }
            };
            pointSet.points.push(point);
            callback();
        });
    }, function (err) {
        if (err) {
            errorArray.push(err);
        }
    });
    

    【讨论】:

    • 感谢您的回复,但更新后的应用程序的工作方式完全相同 - resultCheck 和 errorArray 最终都是空的。至于你的假设 - 你是正确的 async 包,至于 GM API,我没有使用 JavaScript API,我正在尝试通过 npm node-geocoder 包连接到(我假设)HTTP one。我已经相应地更新了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2018-08-19
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多