mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-17 23:44:39 -05:00
Extended sequence utility
no issue - support promise and none promise tasks - helpful if you create an array of operations and not all of the operations/tasks are async - `response instanceof Promise` does not work for all cases e.g. some usages return a transaction/bookshelf chain
This commit is contained in:
parent
137016ab94
commit
b7b4026fd5
1 changed files with 15 additions and 6 deletions
|
@ -1,16 +1,25 @@
|
||||||
var Promise = require('bluebird');
|
const Promise = require('bluebird');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* expects an array of functions returning a promise
|
* expects an array of functions returning a promise
|
||||||
*/
|
*/
|
||||||
function sequence(tasks /* Any Arguments */) {
|
function sequence(tasks /* Any Arguments */) {
|
||||||
var args = Array.prototype.slice.call(arguments, 1);
|
const args = Array.prototype.slice.call(arguments, 1);
|
||||||
|
|
||||||
return Promise.reduce(tasks, function (results, task) {
|
return Promise.reduce(tasks, function (results, task) {
|
||||||
return task.apply(this, args).then(function (result) {
|
const response = task.apply(this, args);
|
||||||
|
|
||||||
|
if (response && response.then) {
|
||||||
|
return response.then(function (result) {
|
||||||
results.push(result);
|
results.push(result);
|
||||||
return results;
|
return results;
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
return Promise.resolve().then(() => {
|
||||||
|
results.push(response);
|
||||||
|
return results;
|
||||||
|
});
|
||||||
|
}
|
||||||
}, []);
|
}, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue