; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = series; | |
var _parallel2 = require('./internal/parallel.js'); | |
var _parallel3 = _interopRequireDefault(_parallel2); | |
var _eachOfSeries = require('./eachOfSeries.js'); | |
var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); | |
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | |
/** | |
* Run the functions in the `tasks` collection in series, each one running once | |
* the previous function has completed. If any functions in the series pass an | |
* error to its callback, no more functions are run, and `callback` is | |
* immediately called with the value of the error. Otherwise, `callback` | |
* receives an array of results when `tasks` have completed. | |
* | |
* It is also possible to use an object instead of an array. Each property will | |
* be run as a function, and the results will be passed to the final `callback` | |
* as an object instead of an array. This can be a more readable way of handling | |
* results from {@link async.series}. | |
* | |
* **Note** that while many implementations preserve the order of object | |
* properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) | |
* explicitly states that | |
* | |
* > The mechanics and order of enumerating the properties is not specified. | |
* | |
* So if you rely on the order in which your series of functions are executed, | |
* and want this to work on all platforms, consider using an array. | |
* | |
* @name series | |
* @static | |
* @memberOf module:ControlFlow | |
* @method | |
* @category Control Flow | |
* @param {Array|Iterable|AsyncIterable|Object} tasks - A collection containing | |
* [async functions]{@link AsyncFunction} to run in series. | |
* Each function can complete with any number of optional `result` values. | |
* @param {Function} [callback] - An optional callback to run once all the | |
* functions have completed. This function gets a results array (or object) | |
* containing all the result arguments passed to the `task` callbacks. Invoked | |
* with (err, result). | |
* @return {Promise} a promise, if no callback is passed | |
* @example | |
* | |
* //Using Callbacks | |
* async.series([ | |
* function(callback) { | |
* setTimeout(function() { | |
* // do some async task | |
* callback(null, 'one'); | |
* }, 200); | |
* }, | |
* function(callback) { | |
* setTimeout(function() { | |
* // then do another async task | |
* callback(null, 'two'); | |
* }, 100); | |
* } | |
* ], function(err, results) { | |
* console.log(results); | |
* // results is equal to ['one','two'] | |
* }); | |
* | |
* // an example using objects instead of arrays | |
* async.series({ | |
* one: function(callback) { | |
* setTimeout(function() { | |
* // do some async task | |
* callback(null, 1); | |
* }, 200); | |
* }, | |
* two: function(callback) { | |
* setTimeout(function() { | |
* // then do another async task | |
* callback(null, 2); | |
* }, 100); | |
* } | |
* }, function(err, results) { | |
* console.log(results); | |
* // results is equal to: { one: 1, two: 2 } | |
* }); | |
* | |
* //Using Promises | |
* async.series([ | |
* function(callback) { | |
* setTimeout(function() { | |
* callback(null, 'one'); | |
* }, 200); | |
* }, | |
* function(callback) { | |
* setTimeout(function() { | |
* callback(null, 'two'); | |
* }, 100); | |
* } | |
* ]).then(results => { | |
* console.log(results); | |
* // results is equal to ['one','two'] | |
* }).catch(err => { | |
* console.log(err); | |
* }); | |
* | |
* // an example using an object instead of an array | |
* async.series({ | |
* one: function(callback) { | |
* setTimeout(function() { | |
* // do some async task | |
* callback(null, 1); | |
* }, 200); | |
* }, | |
* two: function(callback) { | |
* setTimeout(function() { | |
* // then do another async task | |
* callback(null, 2); | |
* }, 100); | |
* } | |
* }).then(results => { | |
* console.log(results); | |
* // results is equal to: { one: 1, two: 2 } | |
* }).catch(err => { | |
* console.log(err); | |
* }); | |
* | |
* //Using async/await | |
* async () => { | |
* try { | |
* let results = await async.series([ | |
* function(callback) { | |
* setTimeout(function() { | |
* // do some async task | |
* callback(null, 'one'); | |
* }, 200); | |
* }, | |
* function(callback) { | |
* setTimeout(function() { | |
* // then do another async task | |
* callback(null, 'two'); | |
* }, 100); | |
* } | |
* ]); | |
* console.log(results); | |
* // results is equal to ['one','two'] | |
* } | |
* catch (err) { | |
* console.log(err); | |
* } | |
* } | |
* | |
* // an example using an object instead of an array | |
* async () => { | |
* try { | |
* let results = await async.parallel({ | |
* one: function(callback) { | |
* setTimeout(function() { | |
* // do some async task | |
* callback(null, 1); | |
* }, 200); | |
* }, | |
* two: function(callback) { | |
* setTimeout(function() { | |
* // then do another async task | |
* callback(null, 2); | |
* }, 100); | |
* } | |
* }); | |
* console.log(results); | |
* // results is equal to: { one: 1, two: 2 } | |
* } | |
* catch (err) { | |
* console.log(err); | |
* } | |
* } | |
* | |
*/ | |
function series(tasks, callback) { | |
return (0, _parallel3.default)(_eachOfSeries2.default, tasks, callback); | |
} | |
module.exports = exports.default; |