多个顺序回调的最佳模式



我有一个多步骤的过程,我想找到一个更好的模式。 假设您需要为一个订单创建收入记录才能最终准备发票。 我有 4 次调用回调函数,需要按顺序发生。 回调通常类似于此处:

getRevenue(item.ID,
  function(revenueRecords) //on success
  {..do whatever to revenue here...}, 
  function(errorMsg) //on failure
  {..show error msg here...});

所以在我的代码中,我需要其中的 4 个,如下所示:

  getRevenue
    getNewInvoice#
      (create invoice details)
      saveRevenue
        (mark order as billed)
        saveOrder
          (alert user we succeeded)

当然,每个人都必须有一个故障函数,而且它变得非常丑陋。 我知道 $q.defer 可以让我组合承诺,并且只有在它们全部完成后才返回,但此过程要求步骤是连续的。 我想知道是否有更好的模式来解决涉及回调的多步骤顺序过程。

您可以链接承诺以进行顺序处理:

假设所有异步调用都返回一个承诺,链接将如下所示:

getRevenue(item.ID)
  .then(function(revenueRecords){
     //..do whatever to revenue here...
     return getNewInvoiceNum(record)
  }
  .then(function(invoiceNum){
     //..create invoice details...
     return saveRevenue()
  }
  .then(function(invoiceNum){
     //..mark order as billed...
     return saveOrder();
  }
  .then(function(isSuccess)){
     //..alert user we succeeded...
  }
  .catch(function(error)){
     // deal with any `rejects` that could happen
  }
我认为这是

大多数"操作"都是服务器端的情况,我真的应该在那里这样做。 我创建了用于添加收入/支出行的新 API 路由,捆绑了发票详细信息并在那里处理了 75%。 更简单,新的 API 调用可能会在未来的其他地方使用。

最新更新