我的脚本在返回assync firestore set function的结果时抛出以下错误:
您必须在交易中回复承诺() - 回调。
根据firebase documentation关于事务,set函数返回一个事务本身。
这是我的代码的简化副本。
var myDoc = {
field1: "v1"
};
var docRef = db
.collection("docs")
.doc("1");
return db
.runTransaction(t => {
return t
.set(docRef, chat, {merge:false}); //has i understand, this should return a transaction object but the error says otherwise.
})
.then( doc => {
response.send();
})
.catch(err => {
...;
})
我还是Nodejs的新手,对链接assyncs方法不太熟悉,所以我必须在这里做一些明显的错误。
答案 0 :(得分:1)
没有使用过firestore事务,但我使用过firebase事务。您可以尝试以下
return db
.runTransaction(t => {
return t.set(docRef, chat, {merge:false})
.then(data => {
return Promise.resolve('transaction complete');
})
.then( doc => {
response.send();
})
.catch(err => {
...;
})
并且包含整个代码的方法必须在您编写return db.runTransaction(t => {....})
时返回承诺
所以,如果不需要,请使用
var transaction = db.runTransaction(t => {...});
答案 1 :(得分:0)
只需执行以下操作:
return db
.runTransaction(t => {
t.set(docRef, chat, {merge:false});
return Promise.resolve(); // Add this line.
})
.then( doc => {
response.send();
})
.catch(err => {
...;
})
如果t.set()
失败,则无论如何都不会进入resolve()
。