Error : agent.add() function is not working i.e not getting output value to user.In Google assistant

Error : agent.add() function is not working i.e not getting output value to user.In Google assistant

以下代码有效。但是 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() 在数据库日志中工作正常。

此行语法无效:

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.

虽然 agent.add() 确实有一些语法问题,但这不是问题的核心。

每次循环时,您似乎还得到了名为 "FirstName" 的快照的 child,我认为这不是您想做的。但这也不是问题的核心。

问题是 query.once() 是一个异步调用,您正在使用回调函数来处理它。 Google 库上的操作期望您 return 一个 Promise 以指示您正在进行异步函数调用,因此它知道在调用完成之前不要向用户 return 任何内容。

您执行此操作的最佳方法是让 query.once() return 一个 Promise,在 Promise 的 .then() 部分处理您的处理,然后 return 处理程序中的 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 );
    });
  });