Node.js 从firestore获取价值需要时间

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(“默认欢迎

问题是数据库中的值在对google操作的响应完成后被更新,我尝试了几个选项使函数等待值更新,但它不起作用, 我需要执行两次以获得正确的值

函数操作(回调){
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)需要位于回调函数内部。所以:将其向上移动一行。:)