【问题标题】:Knex.js return transactionScope in promiseKnex.js 在承诺中返回 transactionScope
【发布时间】:2020-06-10 22:25:25
【问题描述】:

我有一个函数 setClaims,它只是为当前交易设置声明。我需要创建一个辅助函数来检查是否提供了 uuid,设置声明并返回事务对象。像这样的:

export const useAuthTransaction = async (
  kx: Knex,
  setClaims: (tx: Knex.Transaction, uuid?: string) => Promise<any>,
  uuid?: string,
): Promise<Knex.Transaction> => {
  if (!uuid) {
    throw { errorCodes: [RemoveQuestionErrorCode.Unauthorized] };
  }

  return kx.transaction(async tx => {
    await setClaims(tx);
    return tx;
  });
};

但是当我尝试在解析器中使用它时:

useAuthTransaction(kx, setClaims, claims?.uid).then(async tx =>
  dataSources.questionAPI.update(tx, input));

上面写着:

交易查询已经完成

如何解决事务上下文而不关闭它?

【问题讨论】:

    标签: node.js apollo knex.js apollo-server


    【解决方案1】:

    从事务处理程序返回承诺会自动提交/拒绝它。

    所以你正在使用async tx =&gt; {...} 类型的处理程序,它总是隐式返回一个承诺。

    您要做的是使用knex.transactionProvider() 功能(查看文档中的示例),然后您可以传递该事务并明确告知何时应提交/回滚。

    【讨论】:

    • 这正是我所需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2021-10-17
    • 2015-11-27
    • 2015-06-05
    相关资源
    最近更新 更多