Я пытаюсь изучить Nodejs, одновременно изучая платформу AWS.
Я создаю приложение Lex, которое использует функцию Lambda с экземпляром AWS Elastic Search.
Мой поиск является базовым и находит то, что ему нужно, дело в том, что когда я тестирую свой обработчик, он не получает данные. Когда я записываю результаты в консоль, кажется, что объект результата поиска не передается обратно в функцию-обработчик до тех пор, пока обработчик уже не напечатает результаты. Используя журналы консоли, я получаю такой вывод:
Starting handler function
Starting search
{ dialogAction:
{ type: 'Close',
fulfillmentState: 'Fulfilled',
message: { contentType: 'PlainText', content: undefined } } }
Top hit: [object Object]
Элемент содержимого не определен, но вместо этого должен быть объектом Top Hit, возвращаемым из search.js. Я вижу, что объект TopHit обнаруживается, но почему функция index.handler печатается до того, как будет возвращен поисковый ответ?
Моя функция Lambda Handler в index.js:
const search = require("./search.js");
exports.handler = (event, context, callback) => {
console.log("Starting handler function");
const questionReq = event.currentIntent.slots.question;
//console.log(questionReq);
// call Exported function from search js.Pass in string as question
const results = search.searchQuestion(questionReq);
const eventResponse = {
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": results
}
}
};
callback(null, eventResponse);
};
Мой эластичный поиск в search.js:
const client = require('./connection.js');
exports.searchQuestion = function(question)
{
var topHit = "";
console.log("Starting search");
client.search({
index: 'library',
type: 'dsa',
body: {
query: {
match: { "q": question }
},
}
}).then(function (resp){
topHit = resp.hits.hits[0];
console.log("Top hit: " + topHit);
}, function(err){
console.trace(err.message);
})
return JSON.stringify(topHit);
}
Спасибо заранее за любые предложения.