How to refactor callback-based code using the async npm package to use the es6 await/await syntax supported by nodejs v8+
async package | es6 async/await |
---|---|
async.auto({ f1: (callback) => {...}, f2: 'f1', (res, callback) => {...}, f3: 'f2', (res, callback) => {...}, }), (err, results) => { callback(err, { k1: results.f1, k2: results.f2 }); }); |
const results = {} results.f1 = await f1(...) results.f2 = await f2(...) results.f3 = await f3(...) return results |
var isCompleted = 0; async.whilst( function() { !isCompleted; }, function(callback) { callbackFn((err, res) => { if (res.isCompleted) { isCompleted = res.isCompleted; } else { setTimeout(callback, 5000); } }) }, function (err) { callback(err) } ); |
const isCompleted = false while( !isCompleted ) { const res = await util.promisify(callbackFn) if (res.isCompleted) { isCompleted = res.isCompleted } else { await util.promisify(setTimeout).call(5000) } } |
async.series( f1: function f1(cb) {...}, f2: function f2(cb) {...}, f3: function f3(cb) {...} ), err => { if(err) { console.log('error', err); } else { console.log('info', 'success') } } ); |
try { await f1() await f2() await f3() console.log('info', 'success') } catch(err) { console.log('error', err); } |
async.waterfall( f1: function f1(cb) {cb(null, 1, 2)}, f2: function f2(arg1, arg2, cb) {cb(null, 3)}, f3: function f3(arg1, cb) {cb(null, 'done')} ), (err,result) => { if(err) { console.log('error', err); } else { console.log('info', result) } }); |
try { const f1Res = await f1() const f2Res = await f2(f1Res) const f3Res = await f3(f2Res) console.log('info', f3Res) } catch(err) { console.log('error', err); } |
async.parallel( f1: function f1(cb) {...}, f2: function f2(cb) {...}, f3: function f3(cb) {...} ), err => { if(err) { console.log('error', err); } else { console.log('info', 'success') } }); |
const [res1, res2, res3] = await Promise.all([f1, f2, f3]) |
async.eachSeries(openFiles, saveFile, function(err){ }); |
try { for (let f of openFiles) { await saveFile(f) } } catch(err) { console.log('error', err); } |
async.each(openFiles, saveFile, function(err){ }); console.log('done') |
try { const resArr = await Promise.all( openFiles.map(async it => await saveFile(it) ) console.log('done') } catch(err) { console.log('error', err); } |