【问题标题】:NodeJs- Series of nested API call asynchronouslyNodeJs-一系列嵌套API异步调用
【发布时间】:2016-01-04 14:43:41
【问题描述】:

我在支付交易中遇到问题。第一个 API 调用外部 API,该 API 从客户向商家收取资金。在第一次 API 调用成功后,我需要立即调用另一个 API 调用,将商家收取的部分款项转移给第三方。我不确定,NodeJS 异步 - 系列/瀑布方法是正确的选择。

  • 场景 A - 第一次 API 调用抛出错误。整个交易失败,客户将被要求重新尝试交易。

  • 场景 B - 第一个成功,第二个成功。没有问题。

  • 场景 C - 第一个成功,第二个抛出错误。整个交易(使用系列/瀑布)将失败,并要求客户重试,但商家已经获得资金,因为第一笔交易成功。

请帮助我,使用 Express NodeJS 的正确方法是什么?尽可能分享一些代码。

【问题讨论】:

  • 这不是一个单一的问题,实际上是一个相当广泛的问题。您可以调查像 async 这样的模块,它具有您描述的功能,但我不确定如何提供超出该建议的帮助。

标签: node.js node-async


【解决方案1】:

由于最新的实践,最好使用一些 Promises 库,例如 Qbluebird 等。

Q.fcall(promisedStep1)
  .then(promisedStep2)      
  .then(function (value2) {
    // Do something if success
  })
  .catch(function (error) {
    // Handle any error from above steps and revert transaction if needed
  })

我还认为,在您能够回滚交易的部分,在大多数情况下,它应该被实施并且资金必须在某个时候归还。

仅供参考:最新的稳定 nodejs 版本默认支持 Promises。

【讨论】:

    【解决方案2】:
    var express = require('express');    
    var app = express();
    var router = express.Router();
    
    router.get('payment', middleware1, middleware2, successfull);
    
    // handle errors
    app.use(function(err, req, res) {
      res.status(err.status || 500);
      res.send(err.message).end();
    });
    
    function middleware1(req, res, next) {
      try {
        // ...
        next();
      } catch (e) {
        next(e);
      } 
    }
    
    function middleware2(req, res, next) {
      try {
        // ...
        next();
      } catch (e) {
        next(e);
      } 
    }
    
    function successfull(req, res) {
      res.status(201).end(); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      相关资源
      最近更新 更多