javascript - 如何修复: 'Cannot read property ' then' of undefined'

标签 javascript node.js

当我尝试从我的函数中获取响应时遇到问题,我刚刚开始使用 Promises,所以也许我做错了什么。 当我启动应用程序时,出现错误:无法读取未定义的属性“then”。 我做错了什么? 在我开始使用 Promises 之前,一切都运行良好,在我尝试更改应用程序逻辑后,它崩溃了。 我的主要文件如下:

/app.js

const request = require('request');
const yargs = require('yargs');

const geocode = require('./geocode/geocode')

const argv = yargs
    .options({
        a: {
            demand: true,
            alias: 'address',
            string: true,
            describe: 'Address to fetch weather for'
        }
    })
    .help()
    .alias('help', 'h')
    .argv;

geocode.geocodeAddress(argv.a)
.then((res) => {
    console.log(res);
},
(error) => {
    console.log(error);
})

我的地理编码文件:

/geocode/geocode.js
const request = require('request');

const geocodeAddress = (address) => {
    const encodedAddress = encodeURIComponent(address);

    request({
        url: `https://maps.googleapis.com/maps/api/geocode/json?key=myKey&address=${encodedAddress}`,
        json: true
    }, (err, res, body) => {
        return new Promise((resolve, reject) => {
            if(err){
                reject('Unable to connect to Google servers.')
            } else if (body.status === 'ZERO_RESULTS') {
                reject('Unable find any address.')
            } else if (body.status === 'OK') {
                const lat = body.results[0].geometry.location.lat;
                const lon = body.results[0].geometry.location.lng;
                const adrs = body.results[0].formatted_address;
                const answer = {
                    lat: lat,
                    lon: lon,
                    address: adrs
                };
                resolve(answer);
            }
        })
    })
};

module.exports.geocodeAddress = geocodeAddress;

最佳答案

这可能是因为您的 geocodeAddress 是一个常量而不是异步函数。

盲拍尝试:

async geocodeAddress (address) {

就像@liam所说,尝试:

return request({...})

关于javascript - 如何修复: 'Cannot read property ' then' of undefined',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54092222/

相关文章:

javascript - 优化/改进客户端代码

javascript - JavaScript 中的跨站点脚本

javascript - mm menu 和prototype.js 冲突,html 在使用搜索字段时消失

node.js - Google Speech to Text API 在本地给出的结果与在线演示不同

javascript - 在 firefox 中运行 node.js 和 socket.io 时出现 CORS 错误

javascript - 当 Ramda 函数给出空参数时会发生什么?

javascript - 如何解决获取json对象元素的问题

javascript - 使用异步 while 循环创建和插入文档

javascript - Nodejs : async. everySeries 过早调用最终回调

node.js - 使用 --config 设置 Mocha 的路径