函数返回语句

时间:2016-11-11 19:34:43

标签: javascript function promise sequelize.js

在下面的示例中,我从Sequelize docs中获取了有关事务的信息,我不明白为什么你必须为查询和sequelize事务方法添加return语句。

 function doTransaction () {
        return sequelize.transaction(function (t) {

          // chain all your queries here. make sure you return them.
          return User.create({
            firstName: 'Abraham',
            lastName: 'Lincoln'
          }, {transaction: t}).then(function (user) {
            return user.setShooter({
              firstName: 'John',
              lastName: 'Boothe'
            }, {transaction: t});
          });

        }).then(function (result) {
          // Transaction has been committed
          // result is whatever the result of the promise chain returned to the transaction callback
        }).catch(function (err) {
          // Transaction has been rolled back
          // err is whatever rejected the promise chain returned to the transaction callback
        });
    }

1 个答案:

答案 0 :(得分:2)

如果你的诺言then链中有一些东西没有返回任何东西,那么就假定该方法没有做任何属于链的一部分。如果您想扩展链条,那么您有责任返回承诺。这是承诺驱动设计的基本原则之一。

此处事务代码需要知道何时可以提交事务。如果你没有在那个区块内返回promises,那么它将继续并在那些插入操作接近完成之前很久就关闭它。这是异步代码的本质。您需要在不同级别之间进行协调。

如果您忘记在这种情况下返回值,您的代码可能可以正常工作,但它也会出现不可预测的行为,引入细微的错误,如果不加以修正可能会导致混乱。建立一个适当的承诺现在看起来是一个好主意,return语句应该出现在链中的任何内容中,并构造代码以便错误显而易见。