错误:您必须在 transaction() 回调中返回 Promise.在交易开始



这是我的代码片段:

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.createt.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,但错误绝不是明显的,无法指出我的错误。

最新更新