必须在 Firebase CLI 数据请求中适当处理 Promise
Posted
技术标签:
【中文标题】必须在 Firebase CLI 数据请求中适当处理 Promise【英文标题】:Promises must be handled appropriately in Firebase CLI data request 【发布时间】:2020-09-08 07:56:43 【问题描述】:在另一个节点中触发了 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)
【参考方案1】:
正如documentation 中所解释的,后台函数必须返回一个在所有异步工作完成时解析的承诺。这意味着您必须处理异步工作的 API 调用返回的任何承诺。所有 Firebase API 都是以这种方式异步的。现在,你的函数忽略了once().then().catch()
返回的承诺。简单地在 Promise 上调用 then
或 catch
并不能完全“处理” Promise - 它们只是附加回调。
由于您使用的是 async/await,因此甚至不需要使用 then
和 catch
。只需await
once()
返回的promise 并继续处理结果。
const snapshot2 = await acceptRef.once('value');
const price = snapshot2.child('****').val()
...
【讨论】:
以上是关于必须在 Firebase CLI 数据请求中适当处理 Promise的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 函数在 Function.MapValues 处返回 RangeError
在现有 Firebase 项目目录中初始化 firebase CLI 功能