错误:agent.add()函数无法正常工作,即无法获取用户的输出值。在Google助手中

时间:2019-08-27 15:49:23

标签: javascript firebase-realtime-database dialogflow actions-on-google

以下代码正在工作。但是agent.add()函数无法正常工作,即无法将输出值提供给用户。

var ref = admin.database().ref().child("Table/"); 
var query = ref.orderByChild("RegId").equalTo(RegId.toString()); 
query.once("value", function(snapshot) { snapshot.forEach(function(child) {
  console.log(child.key);
  console.log("FirstName: " + child.val().FirstName); 
  console.log("Mobile: " + child.val().MobileNumber); 
  console.log("Email: " + child.val().EmailId);
  var name = snapshot.child("FirstName").val(); 
  agent.add(The student name is ` `+` name);`
});

agent.add()不起作用,但是console.log()在数据库日志中工作正常。

2 个答案:

答案 0 :(得分:1)

agent.add()确实存在语法问题,但这不是问题的核心。

每次循环时,您似乎也都会获得名为“ FirstName”的快照的子对象,我认为这不是您想要执行的操作。但这也不是问题的核心。

问题在于query.once()是一个异步调用,并且您正在使用回调函数来处理它。 Google图书馆的Actions期望您返回一个Promise来指示您正在进行异步函数调用,因此它知道在调用完成之前不会向用户返回任何内容。

执行此操作的最佳方法是让query.once()返回Promise,在Promise的.then()部分中处理您的处理,并在处理程序中返回Promise / then链。

我还没有测试过,但是看起来可能像这样:

return query.once("value")
  .then( snapshot => {
    snapshot.forEach( child => {
      let name = child.val().FirstName;
      console.log( 'FirstName: ' + name );
      agent.add( 'The student name is ' + name );
    });
  });

答案 1 :(得分:0)

此行的语法无效:

agent.add(The student name is ` `+` name);`

应正确引用:

agent.add('The student name is ' + name);
// or if you're using es6:
agent.add(`The student name is ${name}`);

看一个好的代码编辑器,为您突出这些错误。我使用vscode。