[js] 实现异步串行的方法
#example
flow([getUser, getRegions, getClients], done); function getUser (next) { http.get('/userByEmail', { email: input.email }, next); } function getRegions (res, next) { http.get('/regions', { regionId: res.id }, next); } function getClients (res, next) { http.get('/clients', { regions: res.regions }, next); } function done (err, res) { if (err) { throw err; } console.log(res.clients); }
#method
function flow(steps, done) { function next() { var used; return function() { if (used) { return; } used = true; var step = steps.shift(); if (step) { var args = [].prototype.slice.call(arguments); var err = args.shift(); if (err) { done(err); return; } args.push(next()); step.apply(null, args); } else { done.apply(null, arguments); } }; } var start = next(); start(); }