It means I don't have to worry about CPS callback hell
do_something(..., function(err, result) { something_else(result); });
I means I don't even have to do much overt promising
do_something(...).then( (r) => { something_else(result); }).catch( (e) => { ... });
I can just use async/await with automatic exception propagation.
return await do_something(...);
I'm not averse to the odd promise for the interface between an old-style CPS function; after all only an async function can call await. But an async function is also a promise. So I can convert this:
function expressHandler(req, res, next) { do_something(..., function(err, result) { if (err) return next(err); // return avoids else ... next(); }); } ... function do_something(..., callback) { try { ... return callback(undefined, result); } catch (e) { return callback(e); }
into
function expressHandler(req, res, next) { do_something(...).then((r) => { ... next(); }).catch(next); } ... async function do_something(...) { return await something_else(...); }
do_something is called as a promise and can be an async function that can await on other async functions or on promises. Async functions all the way up; callbacks all the way down (where I can't see).
No comments:
Post a Comment