【问题标题】:Correct express promises正确的明示承诺
【发布时间】:2023-04-11 08:43:02
【问题描述】:

我在客户模块中有两个功能,都是承诺:

  1. 是将http body解析成customerData对象。

  2. 将 customerData 传递给 saveCustomer 以将其保存到数据库中。

在我的路线内,我这样做:

    customers.parse(body).then(function (customerData){        
        return customerData;
    }).then(function (merchantData){
        customers.saveCustomer(customerData).then(function (merchant) {
            res.success(merchant);
        })
    }).catch(function (err) {
        res.error(err);
    });

我做得对吗?

【问题讨论】:

  • 您有问题吗?
  • 是的,我只是想知道,我做得对吗?因为我有promise,所以不知道怎么正确使用。
  • customers.saveCustomer(customerData) - 看起来不对,因为 customerData 很可能是未定义的......除此之外,同一行上的 .then 可以在该函数之外,就像前两个一样链接。那么

标签: javascript express promise


【解决方案1】:

可以简化如下:

customers.parse(body)
  .then(function (customerData){
    return customers.saveCustomer(customerData)
  }).then(function (merchant) {
    res.success(merchant);
  }, function (err) {
    res.error(err);
  });

解释:

  • 代码中的第一个 then 是多余的。
  • 最好将customers.saveCustomer 链接到第一个承诺,而不是创建单独的链。
  • catch 将丢失 customers.saveCustomer 错误情况,因为您没有返回该承诺。

【讨论】:

  • 你甚至可以做.then(customers.saveCustomer.bind(customers))
猜你喜欢
  • 2014-11-23
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多