必须在 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 的承诺。简单地调用 then
或 catch
承诺并不能完全 "handle" 承诺 - 它们只是附加回调。
因为你使用的是async/await,所以甚至不需要使用then
和catch
。只需 await
return 由 once()
编辑的承诺并继续处理结果。
const snapshot2 = await acceptRef.once('value');
const price = snapshot2.child('****').val()
...
我正在尝试在另一个节点中触发 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 的承诺。简单地调用 then
或 catch
承诺并不能完全 "handle" 承诺 - 它们只是附加回调。
因为你使用的是async/await,所以甚至不需要使用then
和catch
。只需 await
return 由 once()
编辑的承诺并继续处理结果。
const snapshot2 = await acceptRef.once('value');
const price = snapshot2.child('****').val()
...