gpt4 book ai didi

javascript - DialogFlow 内联编辑器无法通过 if 语句设置响应

转载 作者:行者123 更新时间:2023-11-30 20:06:37 24 4
gpt4 key购买 nike

我正在为一个项目使用 DialogFlow,其中一部分是将用户注册到数据库,这应该可以正常工作,但我正在检查 UID 是否已经存在于数据库中,如果存在,用户应该是警报,但这不起作用。 console.log() 消息将正确的信息传递给 firebase,但它不会对 DialogFlow 做出任何响应,在这种情况下,message 将是响应。

这是我的注册用户代码:

  function registerUser(agent) {

let added = false;
let message = "Not used";
ref.child(uid).once("value", function(snapshot) {
if (snapshot.val() === null) {
ref.child(uid).set({
FIRST_NAME: firstName,
LAST_NAME: lastName
});
added = true;
}
}).then(doc => {
if (added === true) {
message = "Great! You are now added to the database";
console.log("User_added_success");
}
else {
message = "User aldready exists!";
console.log("User_added_fail");
}
});
agent.add(message);
}

输出是 "Not used" 作为响应,console.log() 是 "user_added_success"

最佳答案

您有几个与使用 Promises 的方式相关的问题。 Firebase 数据库和 Firebase Cloud Functions 使用 Promises 来处理 node.js 中的异步操作。在现代 node.js 中,Promises 在很大程度上优于回调。

第一个问题是,当您处理对 Firebase 的调用的响应时,您似乎混合了回调和 Promises。由于 once() 可以返回一个 Promise,您不需要使用回调,但可以将其作为 .then() block 的一部分。这可能看起来像这样:

.once("value").then( snapshot => {
if (snapshot.val() === null) {
ref.child(uid).set({
FIRST_NAME: firstName,
LAST_NAME: lastName
});
added = true;
}
return snapshot;
})

第二个问题是,任何通过 Promise fulfillment 设置的东西都必须在 Promise 链的后面部分读取。所以就像你在第一个 then() 函数中设置 added 并在第二个函数中读取它一样,如果你在第二个函数中设置 message第一,您需要在该 then() 子句或稍后的 then() 子句中处理它。由于没有其他异步操作正在进行,您可以在 if/else 子句之后执行此操作。也许是这样的:

    if (added === true) {
message = "Great! You are now added to the database";
console.log("User_added_success");
}
else {
message = "User aldready exists!";
console.log("User_added_fail");
}
agent.add( message );

但是,还有一个涉及 Promises 的最后一个问题。如果您使用异步调用(因此使用 Promises),您还必须从 Intent Handler 返回一个 Promise,以便 Dialogflow 库知道在将消息发送回用户之前等待结果。不清楚这是否是处理程序本身,但如果是,处理此问题的最简单方法是返回 Promise 链的结果。由于 Firebase 数据库调用返回一个 Promise,这部分可以很简单

return ref.child(uid)

(后面是上面讨论的 .once().then() 方法)。

关于javascript - DialogFlow 内联编辑器无法通过 if 语句设置响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52859392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com