在回调函数中nodeJS中的变量范围

时间:2017-11-11 18:21:31

标签: node.js variables callback scoping

这是我的应用程序中的nodeJS代码块,用于在AWS Lambda中发布。 callProcess函数基本上返回一些关于我传递的城市的处理信息 - 这里为“纽约”硬编码

function speech2(intent, session, callback) {
let country;
const repromptText = null;
const sessionAttributes = {};
let shouldEndSession = false;
let speechOutput = 'old text';


callProcess('New York', function (error, data) {
    if (!error) {
        speechOutput = data;
        console.log(speechOutput);
    }
    else {
        console.log(error.message);
    }

});

    // Setting repromptText to null signifies that we do not want to reprompt the user.
// If the user does not respond or says something that is not understood, the session
// will end.
   callback(sessionAttributes,
        buildSpeechletResponse(intent.name, speechOutput, repromptText, 
shouldEndSession));
}

console.log(speechOutput)正确显示有关城市的已处理信息 - 即callProcess已经工作。但是,具有speechOutput的此函数末尾的回调仍然是指“旧文本”,即我无法使用函数中的已处理信息覆盖变量?如何在回调中执行此操作?

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你的callProcess函数是一个异步函数,可正确显示speechOutput数据。您调用的回调在callProcess函数之外,该函数在执行callProcess之前调用。 你可以通过调用callProcess函数中的回调来获得speechOutput的正确值。 像这样 - “



callProcess('New York', function (error, data) {
    if (!error) {
        speechOutput = data;
        console.log(speechOutput);
callback(sessionAttributes,
        buildSpeechletResponse(intent.name, speechOutput, repromptText, 
shouldEndSession));
    }
    else {
        console.log(error.message);
    }

});




有关异步方法行为的详细信息,请查看此async and sync functions