Node.js 从firestore获取价值需要时间
问题是数据库中的值在对google操作的响应完成后被更新,我尝试了几个选项使函数等待值更新,但它不起作用, 我需要执行两次以获得正确的值Node.js 从firestore获取价值需要时间,node.js,google-cloud-firestore,dialogflow-es,Node.js,Google Cloud Firestore,Dialogflow Es,问题是数据库中的值在对google操作的响应完成后被更新,我尝试了几个选项使函数等待值更新,但它不起作用, 我需要执行两次以获得正确的值 函数操作(回调){ dialogflowAgentDoc.doc(格式).get() 。然后(doc=>{ console.log(doc.data().Url); Url=doc.data().Url; }) .catch((错误)=>{ console.log('获取文档时出错',err); }); 回调(Url); } app.intent(“默认欢迎
函数操作(回调){
dialogflowAgentDoc.doc(格式).get()
。然后(doc=>{
console.log(doc.data().Url);
Url=doc.data().Url;
})
.catch((错误)=>{
console.log('获取文档时出错',err);
});
回调(Url);
}
app.intent(“默认欢迎意图”,conv=>{
新的GetFormat();
log(“GetFormat已启动”);
新操作(函数(Url){
log(“Ask start”);
conv.ask(
新的简单响应({
演讲:“扮演Gallay Tzahal”,
文字:“玩Gallay Tzahal”
}),
新媒体对象({
名称:“Gallay Tzahal新闻”,
url:url,
说明:“文本”,
图标:新图像({
网址:'https://upload.wikimedia.org/wikipedia/he/thumb/3/30/GaltzLogo.svg/150px-GaltzLogo.svg.png',
alt:'媒体图标',
}),
})
);
});
讨论问题(建议3);
});代码>从云加载数据需要花费大量时间。为了防止在等待数据时阻塞应用程序,Firestore(和大多数现代web API)异步加载数据,然后在数据可用时调用传递到then()
的函数
这意味着需要来自Firestore的数据的代码必须在then()
回调中,当数据可用时调用该回调。因此:
function operation(callback) {
dialogflowAgentDoc.doc(format).get()
.then(doc => {
console.log(doc.data().Url);
Url = doc.data().Url;
callback(Url);
})
.catch((err) => {
console.log('Error getting documents', err);
});
}
现在我有一个错误“error getting documents error:Response已经发送。这是否用于未作为对意图处理程序的承诺返回的异步调用?”与我的回答相同,您的conv.ask(suggestions3)代码>需要位于回调函数内部。所以:将其向上移动一行。:)