问题是对google操作的响应完成后,数据库中的值已更新,我尝试了几个选项来使函数等待值更新,但它不起作用, 我需要执行两次以获取正确的值log
function operation(callback) {
dialogflowAgentDoc.doc(format).get()
.then(doc => {
console.log(doc.data().Url);
Url = doc.data().Url;
})
.catch((err) => {
console.log('Error getting documents', err);
});
callback(Url);
}
app.intent("Default Welcome Intent", conv => {
new GetFormat();
console.log("GetFormat Started");
new operation(function(Url) {
console.log("Ask Started");
conv.ask(
new SimpleResponse({
speech: "Playing Gallay Tzahal",
text: "Playing Gallay Tzahal"
}),
new MediaObject({
name: 'Gallay Tzahal News',
url: Url,
description: "text",
icon: new Image({
url: 'https://upload.wikimedia.org/wikipedia/he/thumb/3/30/GaltzLogo.svg/150px-GaltzLogo.svg.png',
alt: 'Media icon',
}),
})
);
});
conv.ask(suggestions3);
});
答案 0 :(得分:1)
从云中加载数据需要花费很多时间。为了防止在等待数据时阻止应用程序,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);
});
}