NodeJs-嵌套API系列异步调用

时间:2015-12-29 15:42:12

标签: node.js node-async

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

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

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

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

请帮助我,使用Express NodeJS做正确的方法是什么?如果可能的话,也要分享一些代码。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

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(); 
}