在另一个节点中触发onCreate事件后,我正在尝试从节点读取数据。然后,来自这些节点的数据将被发送到Google表格。虽然在构建函数时没有报告错误,但存在一个部署错误,其中显示消息"必须正确处理承诺"。这是我的函数:
export const copyAcceptanceToSheet = functions.database.ref('/****/{****Id}/****').onCreate(async (snapshot, context) => {
const orderId = snapshot.ref.parent?.key
const pharmacy = snapshot.val()
const timeCreated = new Date
const ****Base = admin.database()
const acceptRef = ****Base.ref('/*****/'+orderId+'/*****'+pharmacy);
acceptRef.once('value').then(async function (snapshot2) {
try{
const price = snapshot2.child('****').val()
await jwtAuthPromise
await sheets.spreadsheets.values.append({
auth: jwtClient,
spreadsheetId: spreadsheetId,
range: '****Update!A:D', // update this range of cells
valueInputOption: 'RAW',
requestBody: { values: [[timeCreated, price, pharmacy]]}
}, {})
}
catch(error){
console.log(error)
}
})
})
错误消息针对该行
acceptRef.once('value').then(async function (snapshot2)
如文档中所述,后台函数必须返回一个承诺,该承诺在所有异步工作完成时解析。 这意味着您必须处理异步工作的 API 调用返回的任何承诺。 所有 Firebase API 都是异步的。 现在,您的函数忽略了once().then().catch()
返回的承诺。 简单地调用then
或catch
承诺并不能完全"处理"承诺 - 它们只是附加回调。
由于您使用的是 异步/等待,因此甚至无需使用then
和catch
. 只要await
once()
返回的承诺,继续处理结果。
const snapshot2 = await acceptRef.once('value');
const price = snapshot2.child('****').val()
...