Когда вы запускаете этот код в DialogFlow, он запускается в среде облачных функций Google. Google поддерживает время выполнения облачных функций, пока оно необходимо.
По умолчанию Cloud Functions останавливает контейнер после запуска окончательного }
вашего кода. Но в вашем случае вызов queryRef.get()
происходит асинхронно, поэтому все еще выполняется к моменту выполнения }
. Чтобы облачные функции не могли завершить ваш код до завершения вызова базы данных, вы возвращаете возвращаемое значение из queryRef.get()
в облачные функции, что является так называемым обещанием.
Когда Cloud Functions получает обещание из вашего кода, оно поддерживает функцию до тех пор, пока это обещание не будет выполнено. Таким образом, возвращая обещание из queryRef.get()
ваша среда облачных функций будет оставаться активной до тех пор, пока не будет завершен вызов базы данных.
В том же духе agent.add
- это асинхронный вызов, который записывает ответ вызывающему агенту. Чтобы предотвратить преждевременное завершение этого вызова облачными функциями, вам также необходимо вернуть результат из agent.add
в облачные функции.
По природе обещаний, когда вы возвращаете обещание внутри then()
, обещание по существу всплывает. Таким образом, облачные функции заканчивают ожиданием, пока оба запроса к базе данных и завершения ответа не закончатся.