这是我的代码片段:
await firestore.runTransaction(t => {
t.get(docRef)
.then(docRef => {
logger.info("entering transaction");
if (!docRef.exists) {
t.create(docRef, new Data);
return Promise.resolve();
} else {
t.update(docRef, {aField: updateData});
return Promise.resolve();
}
})
.catch(error => {
return Promise.reject(error);
});
})
这给了我以下错误:
错误:您必须在 transaction((-callback 中返回 Promise。 at transaction.begin.then (/srv/node_modules/@google-cloud/firestore/build/src/index.js:496:32( at
这是我第一次使用firestore事务语法,我对nodejs promise概念和语法相当了解。我在这里模仿了 firestore 交易示例并编写了上面的代码片段。
错误后,我试图将Promise.resolve()
更改为Promise.resolve(0)
,但徒劳无功。
我也尝试删除await
并改用.then
,但它仍然给了我同样的错误。
请对它进行一些照明。欣赏它。谢谢。
你需要基本上return
承诺。此外,如果t.create
和t.update
也返回了一个承诺,您可以只返回该承诺。不要做return Promise.resolve()
,这是错误的,因为它会在实际插入或创建之前解决。
假设一切正常,您需要执行以下操作:
await firestore.runTransaction(t => {
return t.get(docRef)
.then(docRef => {
logger.info("entering transaction");
if (!docRef.exists) {
return t.create(docRef, new Data);
} else {
return t.update(docRef, { aField: updateData });
}
})
.catch(error => {
return Promise.reject(error);
});
})
回顾这个例子,我意识到我错过了return t.get()
return
,但错误绝不是明显的,无法指出我的错误。