【发布时间】:2018-01-01 23:22:37
【问题描述】:
我正在使用 Firestore、Cloud Functions 和 Dialogflow 来创建 Google Home 应用。我的云函数应该根据集合中的值返回一个计算,但我只能返回一个 Promise。
// query firestore based on user
var transactions = db.collection('accounts')
.doc(request.body.result.parameters.accountowner)
.collection('transactions');
var accountbalance = await transactions.get()
.then(snapshot => {
var workingbalance = 0
snapshot.forEach(doc => {
workingbalance = workingbalance + doc.data().amount;
});
return workingbalance
})
.catch(err => {
console.log('Error getting transactions', err);
});
console.log(accountbalance)
balanceresponse = {
"speech": request.body.result.parameters.accountowner + " has a balance of $" + accountbalance,
"displayText": request.body.result.parameters.accountowner + " has an account balance of $" + accountbalance,
"data": {},
"contextOut": [],
"source": "system"
}
response.send(balanceresponse);
如何在调用 response.send 之前等待 promise 返回实际值?我也尝试将 response.send 放在 then 中,但函数完成并在操作完成之前发送标头。
【问题讨论】:
-
只是为了清楚 - 你在这里使用 await 吗?您是否使用其他库来添加它? (我认为 GCF 运行 Node 6.11,它本身没有等待。)
-
这里有一个更完整的sn-p gist.github.com/anonymous/7982d7771237f10031102a0281a38b47(我已经去掉了await)
标签: javascript node.js firebase google-cloud-firestore google-cloud-functions