2

我似乎对如何将事务插件(使用 postgresql)与节点 orm2 一起使用有问题。我想我误解了事务如何与异步函数调用一起工作。这是我的代码示例:

function(row){
  db.transaction(function(err, txn){
    if(err){ return console.log(err) };       
    row.property = 'foo';

    row.save(function(err){
      if(err){ return console.log(err) };
      console.log("saved");
    });

    txn.commit(function(err){
      if(err){ return console.log(err) };
      console.log("committed");
    });
  });

当我运行这段代码时,偶尔我会看到 console.log 输出:

"committed"
"saved"

这与我预期的相反。而且我对行所做的更改不会保存到数据库中。看起来这里的异步函数调用存在一些问题,但我只是按照节点 orm2 事务插件中的文档进行操作。

有人知道我做错了什么吗?谢谢!

4

1 回答 1

1

这应该有效。

function(row){
  db.transaction(function(err, txn){
  if(err){ return console.log(err) };       
  row.property = 'foo';

  row.save(function(err){
    if(err){ return console.log(err) };
    console.log("saved");
    txn.commit(function(err){
      if(err){ return console.log(err) };
      console.log("committed");
    });
  });
});
于 2014-01-13T08:49:25.090 回答