mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-24 19:33:02 +03: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,16 +1,25 @@
|
||||
var Promise = require('bluebird');
|
||||
const Promise = require('bluebird');
|
||||
|
||||
/**
|
||||
* expects an array of functions returning a promise
|
||||
*/
|
||||
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 task.apply(this, args).then(function (result) {
|
||||
results.push(result);
|
||||
return results;
|
||||
});
|
||||
const response = task.apply(this, args);
|
||||
|
||||
if (response && response.then) {
|
||||
return response.then(function (result) {
|
||||
results.push(result);
|
||||
return results;
|
||||
});
|
||||
} else {
|
||||
return Promise.resolve().then(() => {
|
||||
results.push(response);
|
||||
return results;
|
||||
});
|
||||
}
|
||||
}, []);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user