这是我的应用程序中的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的此函数末尾的回调仍然是指“旧文本”,即我无法使用函数中的已处理信息覆盖变量?如何在回调中执行此操作?
非常感谢任何帮助。提前谢谢。
答案 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