SailsJS如何纠正这个承诺问题?

时间:2014-06-24 03:31:09

标签: promise sails.js waterline

我使用sails.js更新difference变量的库存数据。当我执行console.log(product.stock)时,值为4.但似乎product.save()函数未执行,因为属性stock仍未更改为4.我猜问题是有希望的。有谁知道如何解决这个问题?

exports.updateProductStock = function (details) {

  details.forEach(function( detail ) {
    var findPrevDetailRule = {
      invoice: detail.invoice,
      product: detail.product.id
    };

    var createPrevDetailRule = {
      invoice: detail.invoice,
      product: detail.product.id,
      quantity: detail.quantity
    };

    var requirementBeforeUpdateStock = [
      PreviousDetail.findOne(findPrevDetailRule).sort('createdAt desc').then(),
      PreviousDetail.create(createPrevDetailRule).then()
    ];

    Q.all(requirementBeforeUpdateStock)
      .spread(function( prevDetail, newPrevDetail ) {
        var difference = detail.quantity - prevDetail.quantity;
        return {
          prevDetail: prevDetail,
          difference: difference
        };
      })
      .then(function( results ) {
        Product.findOne(results.prevDetail.product).then(function(product) {
          product.stock += results.difference;
          // maybe this below is not execute
          product.save();
          console.log(product.stock);
        });
      })
  });

注意:我使用风帆0.10-rc8。已经测试过sails-mysql,sails-mongo,sails-postgres,但仍然相同。

1 个答案:

答案 0 :(得分:0)

.save()接受回调,您可以使用该回调报告成功/失败。

例如,您可以重新发布回客户端(来自sails文档):

product.save(function (err) {
    if (err) return res.send(err, 500);
    res.json(product);
});

根据范围,您可能需要将res传递到您的功能

或者,监视控制台中的成功/失败,例如

product.save(function (err) {
    if (err) console.log('save error: ' + err);//assuming err to be a string
    console.log('save success');
});

至少应该给你一个关于出了什么问题的线索。