我在付款交易中遇到问题。第一个API调用外部API,从客户到商家收钱。第一次API调用成功后,我需要立即调用另一个API调用,将商家收集的部分资金转移给第三方。我不确定,NodeJS异步 - 系列/瀑布方法是正确的选择。
方案A - 第一次API调用抛出错误。整个交易失败,并要求客户重新尝试交易。
情景B - 第一个成功,第二个成功。没问题。
场景C - 第一个成功,第二个抛出错误。整个交易(使用系列/瀑布)将失败,客户将被要求重试,但商家已经有钱,因为第一次交易成功。
请帮助我,使用Express NodeJS做正确的方法是什么?如果可能的话,也要分享一些代码。
答案 0 :(得分:1)
由于最新的做法,最好使用一些Promises库,如Q
或bluebird
等。
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();
}