Когда я использую Promise с библиотекой dialogflow на сервере - получаю ошибку - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь выполнить этот код в облачных функциях Firebase

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const firebase_database = require('./conf/firebase');
const { WebhookClient } = require('dialogflow-fulfillment');

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
     function searcheColleagueByName(agent){
       var lastname = agent.parameters.lastname;        
       firebase_database.ref().once('value')
       .then(team => {
           agent.add("some name " + lastname);
        })
       .catch(err=>{
           agent.add("something wrong");
       })
     }

и после того, как я делаю запрос к своему боту из Telegram, я получаю сообщение об ошибке в консоли Firebase:

Error: No responses defined for platform: null
    at V2Agent.sendResponses_ (/srv/node_modules/dialogflow-fulfillment/src/v2-agent.js:243:13)
    at WebhookClient.send_ (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:505:17)
    at promise.then (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:316:38)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:228:7)

Чтонеправильно?почему, когда я использую promisse, мой агент не может дать мне ответ?

1 Ответ

0 голосов
/ 20 ноября 2018

Проблема в том, что, если вы используете асинхронную функцию, ваш обработчик намерений также должен вернуть Promise. Вам недостаточно отправить ответ как часть предложения then(), вы также должны вернуть Обещание, частью которого является then().

В вашем случае это выглядит довольно просто. В функции searchColleagueByName() вы бы затем вернули once().then().catch() результат, который является Обещанием. (Поскольку then() и catch() возвращают обещание.)

Так что это может выглядеть примерно так:

   return firebase_database.ref().once('value')
   .then(team => {
       agent.add("some name " + lastname);
    })
   .catch(err=>{
       agent.add("something wrong");
   })
...