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