Я хочу, чтобы мой бот Dialogflow сказал сообщение, содержащее результат запроса MongoDB - PullRequest
0 голосов
/ 16 января 2019

Я запрашиваю коллекцию в MongoDB от Dialoglow Fulfillment. Затем я хочу, чтобы мой бот ответил сообщением, содержащим этот запрос. Код в функции выполнения Dialogflow:

function readRecord(agent){
var name;
MongoClient.connect(uri, function(err, client) {
   const collection = client.db("test").collection("data");
    collection.find({fname: 'Example'}).toArray(function(err, result){
        if (err) throw err;
        console.log(result);
        name = result.lname;
        agent.add("Found last name: ", name);
    });
    client.close();
});

}

Когда я запускаю это, я не получаю ответ от своего бота. Когда я console.log(result) информация есть, но я не могу заставить бот сказать это.

1 Ответ

0 голосов
/ 16 января 2019

Проблема в том, что обработчик намерений ожидает, что вы вернете Promise, если вы выполняете какие-либо асинхронные функции, например, обращаетесь к базе данных. Самый простой способ сделать это - перейти от использования обратных вызовов с MongoDB к использованию версий функций, возвращающих Promises, а затем вернуть обещание.

Я не проверял, но что-то вроде этого может работать

return MongoClient.connect( uri )
  .then( client => {
    const collection = client.db("test").collection("data");
    return collection.find({fname: 'Example'}).toArray();
  })
  .then( result => {
    let name = result[0].lname;
    agent.add("Found last name: "+name);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...