【发布时间】:2021-11-17 11:51:31
【问题描述】:
我正在创建一个 API 来检查计数器值,递增 1,然后在文档集合中创建新文档。为此,我使用runTransaction()。
我遇到了问题。事务按预期工作,检查计数器值,然后将其加一。但在那之后,当我尝试设置新文档时,我得到错误(空对象),我不能这样做。我认为我使用的逻辑可能很糟糕,所以我需要你的建议。
const db = admin.firestore()
const couterRef = db.collection('invoices').doc('invoices_doc')
let counterValue = 0
// check last invoice counter number and increment by 1
return db.runTransaction((transaction) => {
return transaction
.get(couterRef)
.then((counter) => {
counterValue = counter.data().counter + 1
// Update counter
return transaction.update(couterRef, { counter: counterValue })
})
.catch((error) => response.status(200).send({ status: 'TRANSACTION ERROR', error }))
})
.then(() => {
// Create new invoice document
couterRef.collection('invoices').doc(counterValue).set({
series: 'SS',
series_nr: counterValue
})
.then(() => response.status(200).send({ status: 'OK' }))
.catch((error) => response.status(200).send({ status: 'DOCUMENT SET ERROR', error }))
})
.catch((error) => {
response.status(200).send({ status: 'RUN TRANSACTION ERROR', error })
})
【问题讨论】:
标签: javascript node.js firebase google-cloud-firestore google-cloud-functions