Node Callback vs Promise vs Await

node v8.17.0
version: 1.0.0
endpointsharetweet
const ERR = null; // const ERR = new Error('erro teste'); // --------------------------------------------------------------- // 0. Synchronous function // --------------------------------------------------------------- function synchronousFunction(param) { if (ERR) { throw ERR; } console.log(`synchronousFunction: ${param}`); return param; } try { var result = synchronousFunction('0') console.log(`synchronousFunction:result: ${result}`); } catch(err) { console.log(`synchronousFunction:err: ${err}`); }
// --------------------------------------------------------------- // 1. Callback Function // --------------------------------------------------------------- function callbackFunction(param, cb) { if (ERR) { return cb(ERR); } console.log(`callbackFunction: ${param}`); return cb(null, param); } callbackFunction('1', function(err, result) { if (err) { console.log(`callbackFunction:err: ${err}`); return; } console.log(`callbackFunction:result: ${result}`); })
// --------------------------------------------------------------- // 2. Promise Function // --------------------------------------------------------------- function promiseFunction(param) { return new Promise(function(resolve, reject) { if (ERR) { return reject(ERR); } console.log(`promiseFunction: ${param}`); return resolve(param); }); } promiseFunction('2') .then(function(result) { console.log(`promiseFunction:result: ${result}`); }) .catch(function(err) { console.log(`promiseFunction:err: ${err}`); })
// --------------------------------------------------------------- // 3. Await Function // --------------------------------------------------------------- async function awaitFunction(param) { if (ERR) { throw ERR; } console.log(`awaitFunction: ${param}`); return param; } // async function returns a promise awaitFunction('3') .then(function(result) { console.log(`awaitFunction:result: ${result}`); }) .catch(function(err) { console.log(`awaitFunction:err: ${err}`); }) // To use await you need to be inside an async function // However the interpreter of this editor (of runkit) does not work that way // (async function () { try { var result = await awaitFunction('3.1') console.log(`awaitFunction:result: ${result}`); } catch (err) { console.log(`awaitFunction:err: ${err}`); } // })() // Any function that returns a promise can use await try { var result = await promiseFunction('3.2') console.log(`promiseFunction:result: ${result}`); } catch (err) { console.log(`promiseFunction:err: ${err}`); }
// --------------------------------------------------------------- // 4. Callback Function to Promise Function // --------------------------------------------------------------- function callbackToPromise(param) { return new Promise(function(resolve, reject) { callbackFunction(param, function(err, result) { return err? reject(err) : resolve(result); }); }); } try { var result = await callbackToPromise('4') console.log(`callbackToPromise:result: ${result}`); } catch (err) { console.log(`callbackToPromise:err: ${err}`); }
// --------------------------------------------------------------- // 5. Promise Function to Callback Function // --------------------------------------------------------------- function promiseToCallback(param, cb) { promiseFunction(param) .then(function(result) { return cb(null, result); }).catch(function(err) { return cb(err); }); } promiseToCallback('5', function(err, result) { if (err) { console.log(`promiseToCallback:err: ${err}`); return; } console.log(`promiseToCallback:result: ${result}`); })
// --------------------------------------------------------------- // 6. API with both interfaces // --------------------------------------------------------------- function bothInterfaces(param, cb = () => {}) { return new Promise(function(resolve, reject) { if (ERR) { cb(ERR) return reject(ERR); } console.log(`duasInterfaces: ${param}`); cb(null, param) return resolve(param); }) } try { var result = await bothInterfaces('6') console.log(`bothInterfaces:result: ${result}`); } catch (err) { console.log(`bothInterfaces:err: ${err}`); } bothInterfaces('6.1', function(err, result) { if (err) { console.log(`bothInterfaces:err: ${err}`); return; } console.log(`bothInterfaces:result: ${result}`); }) // when used with callback it generates an UnhandledPromiseRejection.. .catch(()=>{})
Loading…

no comments

    sign in to comment