节点 - 我的回调函数是否有错误?

时间:2018-01-13 15:02:11

标签: javascript node.js asynchronous callback

编辑 - 此问题已标记为this question的副本,但不是。我的问题不是"如何从异步函数获得响应"。我的问题是我试图使用该问题中解释的解决方案之一(使用回调),但我的回调中必须有错误的功能,我无法弄清楚哪个。

作为JS和Node的新手,我尝试将像Google Maps这样的API合并到botkit bot中。在阅读了关于回调和观看一些视频的大量SO问题之后,我开始计算回调,但在下面的情况下,回调仍然未返回未定义,我无法弄清楚原因。我已将Google地图调用置于回调函数中,然后在机器人听到相应的消息时调用该函数。

给出mapIt函数:

let mapIt = function(queryString) {
    const mapsApiKey = 'THE_API_KEY';
    const googleMapsClient = require('@google/maps').createClient({
    key: mapsApiKey
    });
    googleMapsClient.geocode({
    address: queryString
    }, function(err, response) {
        if (!err) {
            formattedAddress = response.json.results[0]['formatted_address'];
            //console.log(formattedAddress);
            return formattedAddress;
        } else {
            return 'Maps API Error';
        }
    });
};

调用函数:

let getMapsResult = function(suppliedString, callback) {
    return callback(suppliedString);
};

似乎我应该能够使用mapIt的返回值,如下所示:

controller.hears(
  ['\\b.*what is the formatted address of\s*([^\n\r?]*)'], ['direct_message', 'direct_mention', 'mention'],
  function (bot, message) { 

    let queryLocation = message.match[1];
    bot.say(message, getMapsResult(queryLocation, mapIt));

});

任何人都可以帮助我理解为什么我仍然会undefined拨打mapIt

编辑 - 我尝试在bot.say()函数中调用googleMapsClient.geocode(),但没有任何反应。但是,console.log会记录Google地图响应:

googleMapsClient.geocode({
address: queryString
}, function(err, response) {
    if (!err) {
        formattedAddress = response.json.results[0]['formatted_address'];
        console.log(formattedAddress);
        bot.say(message, formattedAddress);

    } else {
        return 'Maps API Error';
    }

});

调用getMapsResult ...

controller.hears(
  ['\\b.*what time is it in\s*([^\n\r?]*)', '\\b.*what\'s the time in\s*([^\n\r?]*)'], ['direct_message', 'direct_mention', 'mention'],
  function (bot, message) { 

        let queryLocation = message.match[1];
        getMapsResult(queryLocation, mapIt);

});

0 个答案:

没有答案