Javascript 必须在Firebase CLI数据请求中适当处理承诺
在另一个节点中触发onCreate事件后,我正在尝试从节点读取数据。然后,来自这些节点的数据将被发送到Google工作表。虽然在我构建函数时没有报告错误,但是出现了一个部署错误,其中显示了消息“承诺必须得到适当处理”。以下是我的功能:Javascript 必须在Firebase CLI数据请求中适当处理承诺,javascript,firebase-realtime-database,promise,google-cloud-functions,firebase-cli,Javascript,Firebase Realtime Database,Promise,Google Cloud Functions,Firebase Cli,在另一个节点中触发onCreate事件后,我正在尝试从节点读取数据。然后,来自这些节点的数据将被发送到Google工作表。虽然在我构建函数时没有报告错误,但是出现了一个部署错误,其中显示了消息“承诺必须得到适当处理”。以下是我的功能: export const copyAcceptanceToSheet = functions.database.ref('/****/{****Id}/****').onCreate(async (snapshot, context) => { c
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
并不能完全“处理”允诺-它们只是附加回调
因为您使用的是async/await,所以甚至不需要使用then
和catch
。只需等待返回的承诺一次()
并继续处理结果
const snapshot2 = await acceptRef.once('value');
const price = snapshot2.child('****').val()
...
您的
onCreate
回调是async
,但您从不等待任何东西。您是想等待
(或返回
)acceptRef.once('value')承诺吗?这是一个错误。我最初在acceptRef.one('value')之外调用sheets.spreadsheets.values.append。忘记删除onCreate中的异步。编辑了代码后,错误消息将继续添加一条注释,以便将来有人引用此问题。async必须附加到onCreate。因此,我放置的原始代码被恢复