必须在 Firebase CLI 数据请求中适当地处理承诺

Promises must be handled appropriately in Firebase CLI data request

我正在尝试在另一个节点中触发 onCreate 事件后从一个节点读取数据。然后来自这些节点的数据将被发送到 Google Sheet。虽然在构建函数时没有报告错误,但存在部署错误,其中显示消息 "Promises must be handled appropriately"。这是我的功能:

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)

documentation 中所述,后台函数必须 return 一个在所有异步工作完成时解析的承诺。这意味着您必须处理 return 由 API 调用异步工作的任何承诺。所有 Firebase API 都是异步的。现在,您的功能忽略了由 once().then().catch() 编辑的 return 的承诺。简单地调用 thencatch 承诺并不能完全 "handle" 承诺 - 它们只是附加回调。

因为你使用的是async/await,所以甚至不需要使用thencatch。只需 await return 由 once() 编辑的承诺并继续处理结果。

const snapshot2 = await acceptRef.once('value');
const price = snapshot2.child('****').val()
...