Как отобразить значение из оснастки в полной реализации DialogFlow с помощью Firestore - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь отобразить информацию, хранящуюся в Firestore.

Это моя БД. enter image description here

Я бы хотел отобразить значение "Definicion".

Это мое намерение на Js (с использованием узлов):

    app.intent('my.def.intent', (conv) => {
    // Trying to get Data from firestone DB,
        var platformRef = db.collection("plataformas").doc("slack");
        var getDef =  platformRef.get()
        .then( snap =>{
            var dat = "";
            if (snap.exists) {
                dat =  snap.data("definicion");
            }
             return dat;
        })
        .catch( err => {
            console.log("error...", err);
        });
    // This is the response for Actions on Google
    conv.ask(new SimpleResponse({
                  speech:"This is the def: " + getDef,
                  text:"This is the def: " + getDef,
                }));
    });

Этот код отображает в ActionsOnGoogle Simulator что-то вроде этого:

Это определение: [обещание объекта]

Я не понимаю, что здесь происходит. Почему я не могу отобразить информацию из "definiciones", и вместо этого есть [обещание объекта]? как я могу отобразить информацию?

Спасибо !!!

1 Ответ

0 голосов
/ 04 июля 2018

Вызов платформе platformRef.get (). Then (...) является асинхронным и возвращает Promise, поэтому при обращении к значению getDef его значением является Promise.

Чтобы исправить это, вы должны поместить код conv.ask внутри блока .then выше. Тем не менее, поскольку у вас уже есть доступ к значению snap внутри, вам не понадобится значение getDef, и вы можете напрямую использовать snap. Наконец, вам нужно вернуть значение этого обещания из вашей функции намерения. Соединение этого дает:

app.intent('my.def.intent', (conv) => {
   // Trying to get Data from firestone DB,
   var platformRef = db.collection("plataformas").doc("slack");
   return platformRef.get()
            .then( snap => {
              var dat = "";
                if (snap.exists) {
                  dat =  snap.data("definicion");
                }
               // This is the response for Actions on Google
               conv.ask(new SimpleResponse({
                  speech:"This is the def: " + dat,
                  text:"This is the def: " + dat,
               }));
           })
           .catch( err => {
             console.log("error...", err);
           });
 });

Предлагаю взглянуть на официальный пример - dialogflow-updates-nodejs . Он также использует Firestore и может помочь с кодированием.

...