Skip to content

Instantly share code, notes, and snippets.

@qcom
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qcom/cc16c1eec449ce90e99f to your computer and use it in GitHub Desktop.
Save qcom/cc16c1eec449ce90e99f to your computer and use it in GitHub Desktop.
async.waterfall([
soap.createClient.bind(null, process.cwd() + '/util/usaepay.wsdl'),
function(client, cb) {
client.runSale(args, cb);
},
function(result, body, cb) {
if (result.runSaleReturn.ResultCode.$value === 'E') {
return new Error('failed to process');
} else if (result.runSaleReturn.ResultCode.$value === 'A') {
return cb(null, result);
} else {
return cb('declined');
}
function(result, cb) {
app.get('db').verifyAd(result.runSaleReturn.RefNum.$value, req.session.user.id, cb);
},
function(result, cb) {
sendMail(req.session.user.email,
app.get('transporter'),
details.service_type,
mixin(result, { price : details.price }),
cb);
}
], function(err, result) {
if (err === 'declined') {
res.render('declined');
} else if (err) {
next(err);
} else {
res.render('authorized');
}
});
@L8D
Copy link

L8D commented Oct 16, 2014

With promises this would look like (I'm assuming here):

soap.clientClient(process.cwd() + '/util/usaepay.wsdl').chain(function(client) {
  return client.runSale(args);
}).chain(function(result) {
  if (result.runSaleReturn.ResultCode.$value === 'E') {
    return Future.rejected(err);
  } else if (result.runSaleReturn.ResultCode.$value === 'A') {
    return Future.of(result);
  } else {
    return Future.rejected('declined');
  }
}).chain(function(result) {
  return db.verifyAd(result.runSaleReturn.RefNum.$value, req.session.user.id);
}).chain(function(result) {
  return sendMail(req.session.user.email,
                  transporter,
                  details.service_type,
                  mixin(result, {price: details.price}));
}).fork(function(err) {
  if (err === 'declined') {
    res.render('declined');
  } else {
    next(err);
  }
}, function() {
  res.render('authorized');
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment